我想在后台执行一项涉及更改UI状态的任务,任务将在MainPage
加载后开始执行。
所以我尝试在CoreDispatcher
事件处理程序中使用Loaded
,如下所示:
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
await CoreApplication.MainView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() => DrawingBoard.Arrange());
}
Arrange()
方法:
public void Arrange()
{
for(int i=1; i<95; i++)
for(int j=1; j<85; j++)
this.Children.Add(new Line{ /*initializing*/ });
}
出现此错误:
错误CS4036&#39; IAsyncAction&#39;不包含&#39; GetAwaiter&#39;的定义没有扩展方法&#39; GetAwaiter&#39;接受类型&#39; IAsyncAction&#39;的第一个参数。可以找到(你是否错过了&#39;系统&#39;的使用指令?)
但如果我不使用async
和await
关键字,则除了在该方法执行期间UI线程无响应外,没有任何错误。
我不知道如何使用await和异步CoreDispatcher
。任何帮助将不胜感激。
答案 0 :(得分:3)
它与async await无关。您将看到是否将using System;
添加到顶部,它还将使用async和await命令进行编译,但仍然运行缓慢。
您的方法已被称为异步,但它必须创建95 * 85 = 8075行对象,在UI线程上执行此操作。由于Line是UI元素,因此您无法在后台执行此操作,但添加此类数量的UI元素需要一些时间。
有多种方法可以实现最佳化,但不知道你试图做什么,不可能给出建议如何以高效的方式工作