C# UWP C如何在异步方法中更改主页外部的Xaml UI矩形填充?
Windows 10、UWP、C、XAML 我试图改变一个不是主方法的类的矩形填充。我已经把我的矩形发送到另一个类,从那里我可以设置它的填充。但是,我需要在正在进行的异步方法期间更改填充,而不是在正在进行的异步方法调用的方法期间更改填充,但是当我尝试这样做时,我得到一个关于线程的异常: 该应用程序调用了一个为 不同的线程。来自HRESULT的异常:0x8001010E RPC_E_错误_线程 所以,我读过关于使用Dispatcher解决这类问题的文章。只有当我不离开主页时,它才对我有效:C# UWP C如何在异步方法中更改主页外部的Xaml UI矩形填充?,c#,xaml,asynchronous,uwp,windows-10,C#,Xaml,Asynchronous,Uwp,Windows 10,Windows 10、UWP、C、XAML 我试图改变一个不是主方法的类的矩形填充。我已经把我的矩形发送到另一个类,从那里我可以设置它的填充。但是,我需要在正在进行的异步方法期间更改填充,而不是在正在进行的异步方法调用的方法期间更改填充,但是当我尝试这样做时,我得到一个关于线程的异常: 该应用程序调用了一个为 不同的线程。来自HRESULT的异常:0x8001010E RPC_E_错误_线程 所以,我读过关于使用Dispatcher解决这类问题的文章。只有当我不离开主页时,它才对我有效:
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方法时,它只是跳过了填充更改。两个调试语句都打印
我试图将Dispatcher代码移到我的另一个类,但该类不知道Dispatcher是什么,我也不知道
很抱歉,我无法提供更多的代码,在一个更简单的示例中复制它时遇到困难。任何帮助都将不胜感激 Dispatcher主要管理UI线程上的调度事件,对UI的任何更新都需要在UI线程上完成 如果您想从页面外部访问它,您可以通过Window.Current.Dispatcher访问它,或者在无法访问窗口的情况下将其作为静态变量分配到某个位置-每个UI线程/窗口中只有一个Dispatcher,该窗口中的所有内容都共享它 但是,如果它同时打印两个调试语句,则很可能不会跳过代码,但您在其他地方遇到了一些问题 顺便说一句,您可能希望作为任务而不是异步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()