使用键盘时InvalidOperationException.任务中的修饰符
本文关键字:任务 键盘 InvalidOperationException | 更新日期: 2023-09-27 18:03:01
我在我的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
。
您需要进入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
});