Vac*_*ano 1 .net c# wpf binding
假设我有一个命令的执行方法,如下所示:
private void Execute()
{
// Bound to a wait indicator in the UI
Searching = true;
// Do some long running process
Thread.Sleep(2000);
Searching = false;
}
Run Code Online (Sandbox Code Playgroud)
当Searching设置为True时,绑定的UI元素将不会更新(即使Searching发送OnPropertyChanged调用).
但是,一旦Thread.Sleep完成,然后UI处理我的更改并显示搜索绑定的等待指示符.
现在,我知道传统的智慧是使对长时间运行的进程(Thread.Sleep)的调用是异步的.
但是假设我没有使用Async库,有没有办法指示WPF立即执行搜索绑定?
像这样的东西:
private void Execute()
{
// Bound to a wait indicator in the UI
Searching = true;
// MADE UP CODE
Binding.UpdateBindingNow("Searching");
// END MADE UP CODE
// Do some long running process
Thread.Sleep(2000);
Searching = false;
}
Run Code Online (Sandbox Code Playgroud)
更新:我尝试过:
您需要将工作推送到后台线程.在UI线程可以处理消息之前,绑定不会更新,直到操作完成才会发生.
Async是一种方法,但更经典的方法是使用它BackgroundWorker来执行此操作,这在所有版本的WPF中都受支持.
如果您使用的是.NET 4,也可以通过TPL执行此操作:
private void Execute()
{
// Bound to a wait indicator in the UI
Searching = true;
Task.Factory.StartNew( () => {
// Do long running work...
}).ContinueWith(t =>
{
// You can do work here, including touching UI controls/collections/etc
Searching = false;
}, TaskScheduler.FromCurrentSynchronizationContext());
}
Run Code Online (Sandbox Code Playgroud)