visual studio personalizados messageboxbuttons error ejemplos critical botones c# messagebox

c# - studio - ¿Creando un MessageBox que no detenga el código?



messageboxbuttons c# (2)

Ok, estoy buscando algo bastante simple: crear un MessageBox que no detenga mi código.

Supongo que tendré que crear un hilo diferente o algo así? Por favor aconseje sobre la mejor manera de lograr esto.

¡Gracias!


Puedes girar otra bomba de mensajes llamándola en un hilo separado. MessageBox.Show bombea el mensaje para que sea seguro hacerlo sin una llamada a Application.Run .

public void ShowMessageBox() { var thread = new Thread( () => { MessageBox.Show(...); }); thread.Start(); }

Editar:

Probablemente debería mencionar que no recomiendo hacer esto. Puede causar otros problemas. Por ejemplo, si tiene dos subprocesos que bombean mensajes, entonces es posible que el cuadro de mensaje se atasque detrás de otro formulario y no haya forma de que desaparezca si el formulario está esperando que alguien cierre el cuadro de mensaje. Deberías intentar resolver el problema de otra manera.


No, vas a tener que hacer tu propio formulario de cuadro de mensaje. La clase MessageBox solo admite un comportamiento similar a .ShowDialog() que es una operación modal.

Simplemente cree un nuevo formulario que tome parámetros y úselos para crear un cuadro de mensaje con estilo a su gusto.

Actualización 2014-07-31

En el espíritu de mantener la claridad para cualquier persona que encuentre esto a través de google, me gustaría tomar un segundo para explicar esto un poco más:

Bajo el capó, MessageBox es un sofisticado envoltorio de C # alrededor de la función de cuadro de mensaje user32.dll del SDK de Windows y, por lo tanto, se comporta exactamente de la misma manera (después de convertir las enumeraciones .NET en los enteros que representan lo mismo en la llamada del sistema.

Lo que esto significa es que cuando llama a MessageBox.Show() la llamada se calcula en el OS y bloqueará el hilo actual hasta que se seleccione una opción o se elimine la ventana. Para evitar que se detenga su código, debe iniciar el cuadro de mensaje en una secuencia separada, pero esto significará que se devolverá cualquier resultado que regrese del cuadro de mensaje ( / No / Ok / Cancelar / Etc ...) al hilo separado que se encargó de llamar al cuadro de mensaje.

Si actúa sobre el resultado de este cuadro de mensaje lanzado de esta manera, tendrá que enviar el resultado nuevamente al hilo de la interfaz de usuario para la seguridad del hilo.

Alternativamente, puede crear su propio formulario de cuadro de mensaje en WinForms / WPF y llamarlo con el método .Show() . Cualquier evento de clic en los botones se ejecutará en el subproceso de la interfaz de usuario y no tendrá que enviar las llamadas al subproceso de la interfaz de usuario para manipular las cosas en la interfaz de usuario.