2012-09-14 38 views
0

我試圖從backgroundworker讀取控件的值。從WPF中的backgroundworker線程讀取控制值

有很多關於如何從後臺線程更新控件的例子,但我還沒有找到一個如何從中讀取的例子。

目前我已經創建了一個結構傳遞給backgroundworker,但它看起來不是很優雅。

結構:

public struct Arguments 
    { 
     public string version; 
     public bool isChecked; 

     public Arguments(string Version, bool IsChecked) 
     { 
      version = Version; 
      isChecked = IsChecked; 
     } 

    } 

按鈕單擊事件

Arguments pass = new Arguments(Version.Text.Trim(), (bool)Credentials.IsChecked); 

export.RunWorkerAsync(pass); 

DoWork的事件

ExportSolution export = new ExportSolution(this, messageBox); 

Arguments pass = (Arguments)e.Argument; 

export.Export(pass.version, pass.isChecked); 

這工作得很好,但我願做類似下面的什麼

DoWork的事件

ExportSolution export = new ExportSolution(this, messageBox);    

export.Export(Access Version.Text.Trim() from here, ditto (bool)Credentials.IsChecked); 

TIA

+0

您是否需要從後臺線程訪問它們以獲取最新和最新的信息?或者你只是想通過不必爲DoWork參數創建類或結構來節省時間? –

+0

我認爲這將是更優雅的沒有一個類或一個結構只爲參數 – ManyRootsofAllEvil

回答

1

這是我落得這樣做:

string version; 
    bool isChecked; 

    public MainWindow() 
    { 
     InitializeComponent(); 

     this.DataContext = validator; 

     //export.DoWork +=new DoWorkEventHandler(export_DoWork); 

     export.DoWork += (sender, args) => 
     { 
      ExportSolution exports = new ExportSolution(this, messageBox); 

      Dispatcher.Invoke((Action)(() => version = Version.Text.Trim())); 
      Dispatcher.Invoke((Action)(() => isChecked = (bool)Credentials.IsChecked)); 

      exports.Export(version, isChecked); 
     }; 
    } 

version是一個文本框和證書是一個複選框。

0

如果你在代碼工作的背後,你可以做的DoWork事件作爲Lambda表達式,

如。

DoWork+=(_,_)=>{...} 

那麼labda表達在裏面可以看到外面的範圍,你可以看到窗口控件的名稱和buttob。

+0

感謝提示 – ManyRootsofAllEvil