Estoy tratando de hacer un cuadro de diálogo de confirmación utilizando el objeto ChildWindow
de Silverlight.Silverlight Confirmar diálogo para detener el hilo
Idealmente, me gustaría que funcione como MessageBox.Show()
, donde toda la aplicación se detiene hasta que el usuario reciba una entrada.
Por ejemplo:
for (int i = 0; i < 5; i++)
{
if (i==3 && MessageBox.Show("Exit early?",
"Iterator", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
break;
}
}
detendría la iteración en la 3, si el usuario pulsa OK ...
Sin embargo, si tuviera que hacer algo en la línea:
ChildWindow confirm = new ChildWindow();
confirm.Title = "Iterator";
confirm.HasCloseButton = false;
Grid container = new Grid();
Button closeBtn = new Button();
closeBtn.Content = "Exit early";
closeBtn.Click += delegate { confirm.DialogResult = true; confirm.Close(); };
container.Children.Add(closeBtn);
Button continueBtn = new Button();
continueBtn.Content = "Continue!";
continueBtn.Click += delegate { confirm.DialogResult = false; confirm.Close(); };
container.Children.Add(continueBtn);
confirm.Content = container;
for(int i=0;i<5;i++) {
if (i==3) {
confirm.Show();
if (confirm.DialogResult.HasResult && (bool)confirm.DialogResult) {
break;
}
}
}
Esto claramente no funcionaría, ya que el hilo no se detiene ... confirm.DialogResult.HasResult
sería falso, y el ciclo continuaría más allá de 3.
Me pregunto cómo podría hacer esto correctamente. Silverlight tiene un único hilo, así que no puedo simplemente poner el hilo en modo de suspensión y luego reactivarlo cuando estoy listo, así que me pregunto si hay algo más que la gente pueda recomendar.
He considerado invertir la lógica, es decir, pasar las acciones que deseo que ocurran a los eventos Sí/No, pero en mi caso específico esto no funcionaría.
¡Gracias de antemano!
¡Eso es genial! Voy a dar una oportunidad y ver qué tan bien funciona ... – AlishahNovin
Se puede adoptar fácilmente para ejecutar el enumerador en una cadena de fondo, lo que hace que el flujo de trabajo de IU con múltiples subprocesos sea muy simple. – SLaks
+1. Punto menor: ¿no te refieres a 'yield return confirm' en' YourMethod'? –