调度程序的使用
本文关键字:调度程序 | 更新日期: 2023-09-27 18:18:48
我在my函数中使用分派器,这个函数做一些工作,有些工作需要分派器,有些不需要。
例如this.Dispatcher.BeginInvoke(delegate()
{
MessageBoxResult result = MessageBox.Show("Are you sure to do this?", MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK)
{
busyIndicator.Visibility = Visibility.Visible;
int add = 3 +4;
string str = "some string";
this.CallofSomeFunction(arguments);
this.CallofAnOtherFunction(arguments);
}
});
在本例中,消息框需要调度程序。第一个调用的函数不需要调度,第二个调用的消息框需要调度。
对于所有这些,我将将所有代码放在单个调度程序中。这种方法好吗?或者我应该在需要的地方使用分派器吗??如果最终结果放置在UI上。那么我应该在dispatcher中做所有的事情(获取结果+在UI中显示)还是应该只在dispatcher中显示UI中的结果。
通常将Dispatcher用于那些与UI相关的任务是一个很好的做法。如果有些东西可以在没有UI线程的情况下运行,那么为什么要让UI线程为此忙碌呢?
如果最终结果放置在UI上。那么我应该在dispatcher中做所有的事情(获取结果+在UI中显示)还是应该只在dispatcher中显示UI中的结果。
视情况而定。最终结果将通过UI Thread或dispatcher显示但如果中间代码需要很长时间,那么你应该将这些代码移到后台线程中,最后使用dispatcher更新UI
你应该永远记住最终目标。最终目标是提供更好的用户体验和不冻结的UI。如果你可以不使用后台线程,那很好,但如果你的业务逻辑需要时间,那么使用后台线程总是好的
一般情况下,您应该只在与UI控件交互时使用分派器。在有限的情况下,在UI线程上执行其他非常快速的操作是可以的,但是避免任何阻塞或长时间运行的,因为这会导致非常糟糕的用户体验(响应速度较慢,UI冻结等)。