我對使用Dispatcher.Invoke在不同線程的UI上更新UI的時間有疑問。UI線程上的Dispatcher.Dispatch
這裏是我的代碼...
public Window4()
{
InitializeComponent();
this.DataContext = this;
Task.Factory.StartNew(() => Test());
}
private List<string> listOfString = new List<string>();
public List<string> ListOfString
{
get { return listOfString; }
set { listOfString = value; }
}
public void Test()
{
listOfString.Add("abc");
listOfString.Add("abc");
listOfString.Add("abc");
}
<Grid>
<ListView ItemsSource="{Binding ListOfString}" />
</Grid>
我在不同的線程開始一個新的任務,我需要使用Dispatcher.BeginInvoke更新UI。
在這種情況下,它正在更新用戶界面,但我已經看到一些場景,其中人們使用Dispatcher.Invoke或BeginInvoke從不同的線程更新UI。
所以我的問題是當我們必須這樣做,爲什麼在這種情況下它工作正常。因爲它實際上不是更新你的UI
感謝&問候, BHavik
但是,如果我正在更新或添加綁定到UI的列表中,是否仍然需要使用Dispatcher的Invoke或BeginInvoke ... – 2012-04-02 16:47:12
取決於列表類型。 '列表':不,但是更新不會出現在用戶界面中。 'ObservableCollection ':是的。 –
2012-04-02 16:53:40
當從任務內部更新它時,是的,你必須調用Dispatcher.Invoke(),我發佈了我的測試的完整示例,以在我的答案中顯示上述內容。 – Despertar 2012-04-02 17:23:46