DialogResult处理

时间:2011-12-13 16:04:20

标签: c# wpf progressdialog dialogresult

我有一个关于从wpf访问dialogdata的问题/我有ProgressDialog :System.Windows.Window 我在OnButtonClick中调用它是这样的:

        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正常(换句话说 - 如何在完成执行后访问dlg' s内部字段),如何检查此函数(OnButtonClick)?

1 个答案:

答案 0 :(得分:1)

DialogResult通常不是内部字段,而是一个相当公共的属性,所以dlg.DialogResult应该没问题(假设它继承自Window),你需要将它强制转换为bool。

我没有看到你在任何地方打开窗口,如果你使用ShowDialog,返回值自动为DialogResult,并且调用线程会阻​​塞直到它被关闭。

var result = (bool)dlg.ShowDialog();

如果您需要非模态对话框,可以使用Show订阅Closed事件并检查DialogResult那里。

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

当然,对话框需要在任何一种情况下设置属性。 Alt + f4等默认操作将其设置为false。