Mouse.LeftButton == MouseButtonState.Pressed永远不会返回true

时间:2015-02-15 11:27:24

标签: c# .net winforms

我在C#中有一个Windows窗体应用程序,它监视鼠标按钮是否被按下。 GUI有一个主线程,它产生一个辅助STA线程。此代码永远不会在其中执行:

 if (Mouse.LeftButton == MouseButtonState.Pressed)
 {
    System.Diagnostics.Debug.WriteLine("Left mouse down");
 }

我想知道这是否是因为我为该线程启用了以下STA选项?

 repeaterThread.SetApartmentState(ApartmentState.STA);
 repeaterThread.Start();

完整相关代码: 我使用PresentationCore.dllSystem.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);
   }
}

如何从此线程中按下鼠标按钮,我该如何捕获?

由于

1 个答案:

答案 0 :(得分:8)

问题是你正试图混合两种GUI技术:WinForms和WPF。您已设置适合WinForms的环境,但尝试使用WPF中的方法。

您不需要PresentationCore.dllSystem.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);
    }
}