Dispatcher.Invokeを使用して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>
私は別のスレッドで新しいタスクを開始、私はUIを更新するためにDispatcher.BeginInvokeを使用する必要がありますしています。
この場合、UIを更新していますが、別のスレッドからDispatcher.InvokeまたはBeginInvokeを使用してUIを更新するシナリオをいくつか見てきました。
私の質問は、私たちがそれをしなければならないときです。なぜこの場合はうまくいきますか?それは実際にあなたのUIを更新しないよう
おかげ&よろしく、 BHavik
しかし、UIにバインドされているリストを更新または追加している場合は、DispatcherのInvokeまたはBeginInvokeを使用する必要がありますか? –
リストの種類によって異なります。 'List':いいえ、しかし、更新はUIに表示されません。 ObservableCollection ':はい。 –
タスクの内部から更新する場合は、Dispatcher.Invoke()を呼び出す必要があります。これを私の答えに上に示すためにテストの完全な例を掲載しました。 – Despertar