这是一个代码示例。想象一下,它不是一个ViewModel
,也没有什么相关的。
解释:
所以我有一个ObservableCollection
我想从数据库中删除的项目。为了避免阻塞 UI,我在后台线程中调用它。
如果我有数据库问题或者它成功了,我想在 UI 中显示。所以我在Dispacther.BeginInvoke
.
我知道调用BeginInvoke
会将线程上下文更改为 UI。
代码示例:
ThreadPool.QueueUserWorkItem(new WaitCallback((o) =>
{
Action completedAction = null;
try
{
//Delete from database;
item.Delete();
completedAction = () => { this.Observable.Remove(item); };
}
catch (Exception)
{
completedAction = () =>
{
someTextBox.Text = "Error";
};
}
App.Current.Dispatcher.BeginInvoke(completedAction);
}));
问题:
BeginInvoke
我想知道是否甚至认为我在将线程上下文更改回后台线程之后没有编写更多代码。
PS。我知道我可以使用BackgroundWorker
,但对我来说使用QueueUserWorkItem
起来更简单。