2011-12-13 66 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

?只需等待對話框提出事件。 –