Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在类方法中调用对话框_C#_.net_Wpf - Fatal编程技术网

C# 在类方法中调用对话框

C# 在类方法中调用对话框,c#,.net,wpf,C#,.net,Wpf,我在一个WPF(使用.NET4.0)应用程序中有一个类函数,它运行一个同步过程,需要在该过程中进行一些停止,以等待用户准备就绪。因此,在过程中,我需要弹出一些对话框,暂停过程,直到用户单击“确定” 实现这一点最干净的方法是什么 如果有某种方法可以让该函数向主窗口发出调用对话框的信号,我会犹豫是否要将类函数与WPF对话框混为一谈。或者我不应该为此担心吗?在您确定更好的重构方法之前,我将使用以下方法。在不了解任何特定体系结构的情况下: void MyLongProcedure() { //

我在一个WPF(使用.NET4.0)应用程序中有一个类函数,它运行一个同步过程,需要在该过程中进行一些停止,以等待用户准备就绪。因此,在过程中,我需要弹出一些对话框,暂停过程,直到用户单击“确定”

实现这一点最干净的方法是什么


如果有某种方法可以让该函数向主窗口发出调用对话框的信号,我会犹豫是否要将类函数与WPF对话框混为一谈。或者我不应该为此担心吗?

在您确定更好的重构方法之前,我将使用以下方法。在不了解任何特定体系结构的情况下:

void MyLongProcedure() {
    // do some stuff
    if(GetDialog() == DialogResult.OK) { }

    // do some more stuff
    if(GetDialog() == DialogResult.OK) { }
}

DialogResult GetDialog() {
    return myDialog.ShowDialog();
}

如果有停止过程的选项,那么您可以添加对DialogResult的检查。取消,并实现对长过程的优雅退出。

如果没有关于应用程序的更多细节,很难给出准确的答案,但我会选择以下内容(代码可能不会按原样编译)


过程是同步的还是异步的?什么版本的.Net?@IAbstract Synchronous。第4版。
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);
    }
}