2011-12-13 50 views
0

我有一个关于从WPF访问dialogdata问题/我有一个ProgressDialog :System.Windows.Window 我象这样调用它OnButtonClick:DialogResult的处理

 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); 
} 

的问题是 - 如何在此功能检查(OnButtonClick)如果DialogResult确定(换句话说 - 如何在完成执行后访问dlg的内部字段)?

回答

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。

+0

的ShowDialog是RunWorkerThread - >返回的ShowDialog()?假; –

+0

返回布尔但我想:如果(dlg.RunWorkerThread(0,处理程序)),但我的数据是仍在进行中 - 为什么你会做任何一种考验我couldnot得到一个访问 –

+0

?只需等待对话框提出事件。 –