簡體   English   中英

在任務中使用 Keyboard.Modifiers 時出現 InvalidOperationException

[英]InvalidOperationException when using Keyboard.Modifiers in a Task

我在我的 WPF 項目中使用以下代碼:

Task.Factory.StartNew(
                        () =>
                        {
                            if (Keyboard.Modifiers == ModifierKeys.Alt) // <- Here
                                Thread.Sleep(1000);                            
                        })
                        .ContinueWith(t =>
                        {
                          // do somthing
                        });

我會得到 InvalidOperationException :

if (Keyboard.Modifiers == ModifierKeys.Alt)

它告訴我:

調用線程必須是 STA,因為許多 UI 組件都需要這個。

我只是不明白,? 這似乎是一個簡單的代碼,但為什么呢?

它是對控制屬性的跨線程訪問。 在這種情況下,您應該使用Dispatcher 這篇文章。

您需要將 go 放到 UI 線程上才能訪問鍵盤。 嘗試這個:

                Task.Factory.StartNew(
                        () =>
                        {
                            if ((bool)Dispatcher.Invoke(DispatcherPriority.Normal, new Func<bool>(() =>
                            {
                                 return Keyboard.Modifiers == ModifierKeys.Alt;
                             })))
                             {
                                Thread.Sleep(1000);                            
                             }
                        })
                        .ContinueWith(t =>
                        {
                          // do somthing
                        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM