C sharp - Problema Formulario de espera

 
Vista:

Problema Formulario de espera

Publicado por Marcos (1 intervención) el 25/06/2020 16:15:44
Buenas tardes a todos...

Tengo un problema con un formulario que estoy implementando para cuando hay esperas largas en la aplicación.

Os comento:

Tengo una clase que implementa la interface IDisposable.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Espera : IDisposable
{
    FrmEspera fEspera;
 
    public Espera(string texto = "Espere...")
    {
        Task.Run(async () => await mostrarFormulario(texto));
    }
 
    private Task mostrarFormulario(string texto)
    {
       return Task.Run(() =>
        {
            fEspera = new FrmEspera(texto);
            fEspera.ShowDialog();
        });
    }
    public void Dispose()
    {
        try
        {
            fEspera?.InvokeIfRequired(() => fEspera.Dispose());
            GC.SuppressFinalize(this);
        }
        catch (Exception ex)
        {
            Log.Instance.Error($"Error Espera => {ex.Message}");
        }
 
    }
}



El problema que tengo es que cuando ejecuto la aplicación por primera vez funciona todo correctamente, pero si vuelvo a ejecutarlo el formulario espera es nulo, no ejecuta el método dispose y el formulario se queda abierto.

1
2
3
4
5
6
7
8
9
private async void btnGuardar_Click(object sender, EventArgs e)
{
    using (new Espera("Asigando reglas al perfil..."))
    {
        //mi método....
    }
 
    MessageBox.Show("Los cambios se realizaron correctamente")
}


Gracias por vuestro tiempo.

S2
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema Formulario de espera

Publicado por Nacho (94 intervenciones) el 25/06/2020 21:40:05
Se me ocurren dos cosas.
Una que tienes que poner fEspera a null después del Dispose y otra que al ser un diálogo modal se quede el hilo suspendido y no ejecute ni el dispose ni nada y se quede abierto esperando algo en su función de ventanas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar