【发布时间】:2019-04-28 02:41:16
【问题描述】:
我的目标是 WPF .NET 4.6.1。 我经常这样做:
btnClick
{
Task T1 = Task.Run<List<Double>>( AsyncFunction );
T1.Wait(.1);
Dispatcher.Invoke(() => { txtStatus.Text+="HOLD ON.."; };
T1.Wait(.1);
}
在这些 Wait(s) 之间真正更新 UI 的唯一方法是:
Dispatcher.Invoke(new Action(()=>{}),priority: DispatcherPriority.ApplicationIdle);
这是对的吗?这是便携的吗?描述讨论不同平台(UWP、Windows 10 Phone)上的不同方法。
可能会见Raymond Chen:https://devblogs.microsoft.com/oldnewthing/20190327-00/?p=102364
我明确不想使用异步按钮事件,因为我需要能够帮助用户,至少将逻辑用于十分之一秒的完成检查,并且不让用户猛烈抨击异步按钮处理程序试图获得结果并让我的传感器网络充满数据。
你知道我最终也想得到这个结果,并在相同的事件处理程序代码中处理它,所以就像我不想使用 BackroundWorker 然后让用户必须单击另一个按钮来轮询结果,可能仍然是空的,让每个人都非常非常生气。而且我不想自动轮询结果然后再次轮询传感器网络并导致更多拥塞。
【问题讨论】:
-
这不是“正确的”,因为该方法似乎比使用异步等待更糟糕。如果您想在按钮开始的漫长过程完成之前避免第二次单击,可能会带有一些繁忙的标志。如果这就是要求。
-
@Andy 我正在使用异步等待,我正在执行任务运行,并且大多数情况下我只是在我的函数中等待网络数据。我的问题是关于调度员的。我认为我可以调用并且 UI 线程会在我的同步等待调用之间的任何上下文切换期间为我更新文本框。但直到我完全退出按钮点击事件。或者做那些无用的事情。
标签: wpf async-await