我在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组件都需要 此
我只是不明白!它似乎是一个简单的代码,但为什么呢?
答案 0 :(得分:2)
它是对控件属性的跨线程访问。在这种情况下,您应该使用Dispatcher
。
见this article.
答案 1 :(得分:1)
您需要进入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
});