C# 对话框结果处理

C# 对话框结果处理,c#,wpf,progressdialog,dialogresult,C#,Wpf,Progressdialog,Dialogresult,我有一个关于从wpf访问dialogdata的问题/我有一个ProgressDialog:System.Windows.Window 我在按钮上调用它如下所示: void OnButtonClick(object sender, RoutedEventArgs e) { ProgressDialog dlg = new ProgressDialog(""); //dlg.AutoIncrementInterva

我有一个关于从wpf访问dialogdata的问题/我有一个
ProgressDialog:System.Windows.Window
我在按钮上调用它如下所示:

        void OnButtonClick(object sender, RoutedEventArgs e)
        {   
            ProgressDialog dlg = new ProgressDialog("");
            //dlg.AutoIncrementInterval = 0;
            LibWrap lwrap = new LibWrap();
            DoWorkEventHandler handler = delegate { BitmapFrame bf = lwrap.engine(frame); };
            dlg.CurrentLibWrap = lwrap;
            dlg.AutoIncrementInterval = 100;
            dlg.IsCancellingEnabled = true;
            dlg.Owner = Application.Current.MainWindow;
            dlg.RunWorkerThread(0, handler);
}

问题是-如果DialogResult正常,如何签入此函数(OnButtonClick)(换句话说-在它完成执行后如何访问dlg的内部字段)?

DialogResult
通常不是内部字段,而是一个公共属性,因此
dlg.DialogResult
应该可以(假定它从窗口继承),你需要把它扔到一个地方

我看不到您在任何地方打开窗口,如果您使用返回值,则返回值将自动为
对话框result
,并且调用线程将阻塞,直到关闭为止

var result = (bool)dlg.ShowDialog();
如果您需要一个非模式对话框,您可以使用subscribe to the event并在那里检查
对话框结果

dlg.Closed += (_,__) =>
{
    var result = (bool)dlg.ShowDialog();
    // Do something with it.
}
dlg.Show();

当然,无论哪种情况,对话框都需要设置属性。默认操作(如Alt+f4)将其设置为false。

ShowDialog位于RunWorkerThread->return ShowDialog()中??虚假的;它返回bool,但我尝试了:if(dlg.RunWorkerThread(0,handler)),但我的数据仍在处理中-我无法获得访问权限为什么要进行任何类型的测试?只需等待对话框引发事件即可。我已尝试dlg.Closing+=new CancelEventHandler(dlg\u Closing);dlg.Closed+=新事件处理程序(dlg_Closed);非函数dlg_Closed或dlg_Closed在进度对话框折叠(不是错误)(折叠或实际关闭?如果对话框实际关闭,则应调用该方法,我不知道您在那里做什么。。。