我在 WPF(使用 .Net 4.0)应用程序中有一个类函数,它通过一个同步过程运行,该过程需要在其中停下来等待用户准备好。所以在程序中我需要弹出一些对话框,这些对话框只是暂停程序,直到用户单击“确定”。
实现这个的最干净的方法是什么?
如果有某种方法可以让函数向 MainWindow 发出信号以改为调用对话框,我会犹豫是否用 WPF 对话框混淆类函数。还是我不应该担心这个?
在您确定更好的重构方法之前,我将使用以下方法。在不了解您的任何特定架构的情况下:
void MyLongProcedure() {
// do some stuff
if(GetDialog() == DialogResult.OK) { }
// do some more stuff
if(GetDialog() == DialogResult.OK) { }
}
DialogResult GetDialog() {
return myDialog.ShowDialog();
}
如果有停止该过程的选项,那么您可以添加一个检查DialogResult.Cancel
并实现长过程的优雅退出。
如果没有关于您的应用程序的更多详细信息,很难给出准确的答案,但我会选择以下内容(代码实际上可能无法按原样编译)
public class WaitForUserProcedureImpl : IWaitForUserProcedure
{
public void DoSomething(Action pause)
{
// do stuff
pause(); // pause
// do more stuff
// ....
pause();
}
}
public class MainWindow: Window
{
private void button_click(object sender)
{
WaitForUserProcedureImpl proc = new WaitForUserProcedureImpl();
Action myPauseAction = new Action(
()=>
{
MessageBox.Show("Press ok to continue","Press ok to continue",MessageBoxButtons.OK);
}
);
proc.DoSomething(myPauseAction);
}
}