Форма открывается, но вылетает после завершения действия - PullRequest
0 голосов
/ 22 мая 2019

Допустим, у меня есть две формы.После использования действия под названием PantallaEspera, которое создает экран ожидания, я хочу открыть новую форму, но она открывает ее, а затем вылетает.

Если я удалю действие, оно прекрасно работает.Вот что я сделал:

Экран загрузки:

using System;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace RedBeetle.Forms_bueno
{
    public partial class PantallaEspera : Form
    {
        public Action Proceso { get; set; }

        public PantallaEspera(Action proceso)
        {
            InitializeComponent();
            Proceso = proceso;
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            Task.Factory.StartNew(Proceso).ContinueWith(t => { this.Close(); }, TaskScheduler.FromCurrentSynchronizationContext());
        }
    }
}

Код, где я вызываю действие:

private void EjecutarBusqueda()
        {
            var listaUsuarios = AccesoDatos.DevolverNombresUsuario();
            var esta = false;

            foreach (string elem in listaUsuarios)
            {
                if (txtBuscar.Text == elem)
                {
                    esta = true;
                }
            }

            if (txtBuscar.Text == "")
            {
                //Si intentas buscar con el campo vacio no haces nada
            }
            else if (esta) //Si el nombre de usuario suministrado por el txtbox existe en la base de datos, procedes
            {   //Si es el enter hace la busqueda
                var perfilUsuario = new PerfilUsuario(txtBuscar.Text, caller);
                perfilUsuario.Show();
            }
        }

        private void BtnBuscar_Click(object sender, EventArgs e)
        {
            using( var pEspera = new PantallaEspera(EjecutarBusqueda))
            {
                pEspera.ShowDialog(this);
            }
            Hide();
        }

Почему происходит сбой?Это мой первый год обучения C #, так что, возможно, я сделал что-то не так.Вот что происходит со второй формой: enter image description here

А вот так это выглядит без действия: enter image description here

1 Ответ

0 голосов
/ 22 мая 2019

Попробуйте вместо этого:

    //avoid handling events this way; attach an event handler instead unless you specifically EE's to override the base onload 
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        Task.Run(Proceso).Wait();
        this.Close();
    }
...