2012-01-17 63 views
-1

可能重複:
What is the use of a Dispatcher Object in WPF?訪問/從不同的線程更改UI元素屬性

不好意思問這似乎是一個相當普遍的問題,但我有一個問題線程試圖訪問UI對象並失敗,因爲「一個不同的線程擁有它們」。

我已經閱讀過,有很多這方面,但我一直無法找到任何具體的幫助我,我太新來的線程和線程能夠理解答案和提取我從我找到的來源獲得的知識。

我在我此刻的代碼是這樣的:

void Sc_OnDataSetFilled() 
    { 
     ddlSelectGraph.SelectedIndex = 0; 

     this.DataContext = App.Sc.PepperOverview; 
    } 

這是一個事件處理程序,這是在代碼的其他地方引發成功填充的DataSet時。完成此操作後,我希望ComboBoxddlSelectGraphSelectedIndex發生更改,這是由於UI元素屬於不同的線程而導致代碼絆倒的位置。

當調試器嘗試設置頁面的DataContext屬性時,會出現同樣的問題,因爲前面提到的DataSource也是其他線程的一部分。

有人可以給我一些白癡證明的建議,或者指向我一些請嗎?

+0

您使用Dispatcher將調用封送到UI線程。每個線程都有自己的Dispatcher,所以你必須得到一個屬於UI線程的引用。當涉及到多線程時,沒有「白癡證明」的建議。除了「不這樣做」,就是這樣。 – Will 2012-01-17 14:49:46

回答

2
this.Dispatcher.Invoke(new Action<object>((context) => 
       { 
        this.DataContext = context; // your implementation goes here 
       }), 
       new object[1] 
       { 
        "you object" // the object(s) you'd like to pass in 
       });