我在我的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组件都需要这一点。
我就是不明白!!这似乎是一个简单的代码,但为什么呢?
发布于 2011-07-22 09:44:10
您需要进入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
});发布于 2011-07-22 09:37:38
它是对控制属性的跨线程访问。在这种情况下,您应该使用Dispatcher。请参阅这篇文章。
https://stackoverflow.com/questions/6788120
复制相似问题