![](/img/trans.png)
[英]System.InvalidOperationException when using Keyboard.IsKeyDown() in Main
[英]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.