我在C#中有一个Windows窗体应用程序,它监视鼠标按钮是否被按下。 GUI有一个主线程,它产生一个辅助STA线程。此代码永远不会在其中执行:
if (Mouse.LeftButton == MouseButtonState.Pressed)
{
System.Diagnostics.Debug.WriteLine("Left mouse down");
}
我想知道这是否是因为我为该线程启用了以下STA选项?
repeaterThread.SetApartmentState(ApartmentState.STA);
repeaterThread.Start();
完整相关代码:
我使用PresentationCore.dll
和System.Windows.Input
;
Winforms GUI:
按下开始按钮:
...
Thread repeaterThread = new Thread(() => ListenerThread());
repeaterThread.SetApartmentState(ApartmentState.STA);
repeaterThread.Start();
...
ListenerThread方法:
public static void ListenerThread()
{
while(true)
{
if (Mouse.LeftButton == MouseButtonState.Pressed)
{
System.Diagnostics.Debug.WriteLine("Left mouse down");
}
Thread.sleep(1000);
}
}
如何从此线程中按下鼠标按钮,我该如何捕获?
由于
答案 0 :(得分:8)
问题是你正试图混合两种GUI技术:WinForms和WPF。您已设置适合WinForms的环境,但尝试使用WPF中的方法。
您不需要PresentationCore.dll
和System.Windows.Input
。使用System.Windows.Forms.Control
类:
public static void ListenerThread()
{
while (true)
{
if ((Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left)
{
System.Diagnostics.Debug.WriteLine("Left mouse down");
}
Thread.Sleep(1000);
}
}