Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UWP C如何在异步方法中更改主页外部的Xaml UI矩形填充?_C#_Xaml_Asynchronous_Uwp_Windows 10 - Fatal编程技术网

C# UWP C如何在异步方法中更改主页外部的Xaml UI矩形填充?

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解决这类问题的文章。只有当我不离开主页时,它才对我有效:

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()