(Windows 10,UWP,C#,XAML) 我试图从一个不是主要方法的类中更改矩形的填充。我已将我的矩形发送到另一个班级,然后我可以设置它的填充。但是,我需要在正在进行的异步方法中更改Fill(相反,在正在进行的异步方法调用的方法期间),但是当我尝试这样时,我得到一个关于线程的例外:
该应用程序调用了一个为a编组的接口 不同的线程。 (HRESULT的例外情况:0x8001010E (RPC_E_WRONG_THREAD))
所以,我已经读过使用Dispatcher来解决这类问题。只有当我不离开MainPage时,它才适用于我:
public async void printer()
{
await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
Debug.WriteLine("I'm inside the printer before");
this.staffImageBorder.Fill = new SolidColorBrush(Colors.Blue);
Debug.WriteLine("I'm inside the printer after");
});
}
但是,当我从其他类调用此printer()方法时,它只是跳过Fill更改。两个Debug语句都打印。
我尝试将Dispatcher代码移到我的其他班级,但该班级并不知道" Dispatcher"是(我也不......)。
抱歉,我无法提供更多代码,我在一个更简单的例子中难以复制它。任何帮助将不胜感激!
答案 0 :(得分:1)
Dispatcher实际上管理UI线程上的调度事件(并且UI的任何更新都需要在UI线程上完成!)。
如果你想从页面外部访问它,你可以通过Window.Current.Dispatcher访问它(或者如果你不能访问Window那么将其指定为静态变量 - 那里只有一个调度程序每个UI线程/窗口,该窗口中的所有内容共享)
如果它打印了两个Debug语句,但它很可能不会跳过你的代码,但你在其他地方遇到了一些问题。
顺便说一句,你可能想重写为任务而不是async void。public Task SetPrintFillAsync()
{
return this.Dispatcher.RunAsync(CoreDispatcherPriority.High, () =>
{
Debug.WriteLine("I'm inside the printer before");
this.staffImageBorder.Fill = new SolidColorBrush(Colors.Blue);
Debug.WriteLine("I'm inside the printer after");
});
}
并打电话给
await SetPrintFillAsync()