[英]UWP C# How to change Xaml UI rectangle fill outside of MainPage in async method?
(Windows 10,UWP,C#,XAML)我試圖從不是主要方法的類中更改矩形的Fill。 我已經將矩形發送到另一個類,從那里我可以設置它為Fill。 但是,我需要在正在進行的異步方法期間(而是在正在進行的異步方法正在調用的方法期間)更改Fill,但是當我嘗試這樣做時,卻遇到了關於線程的異常:
該應用程序調用了一個已編組為不同線程的接口。 (來自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”是什么(我也不是……)。
抱歉,我無法提供更多代碼,在一個簡單的示例中很難復制它。 任何幫助將不勝感激!
分派器實質上是在UI線程上管理調度事件(並且對UI的任何更新都需要在UI線程上完成!)。
如果您想從頁面外部訪問它,則可以通過Window.Current.Dispatcher訪問它(如果無法訪問Window,則可以將其作為靜態變量分配給某個地方-每個UI線程/窗口只有一個調度程序,該窗口中的所有內容窗口共享)
但是,如果要同時打印兩個Debug語句,則很有可能不會跳過您的代碼,但是其他地方會遇到問題。
順便說一句,您可能希望將其重寫為“任務”而不是異步無效。
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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.