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

use*_*056 4 .net c# winforms

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

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

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

 repeaterThread.SetApartmentState(ApartmentState.STA);
 repeaterThread.Start();
Run Code Online (Sandbox Code Playgroud)

完整的相关代码:我正在使用PresentationCore.dll,和System.Windows.Input; Winforms GUI:

按下开始按钮:

 ...
 Thread repeaterThread = new Thread(() => ListenerThread());
 repeaterThread.SetApartmentState(ApartmentState.STA);
 repeaterThread.Start();
 ...
Run Code Online (Sandbox Code Playgroud)

ListenerThread方法:

public static void ListenerThread()
{
   while(true)
   {
      if (Mouse.LeftButton == MouseButtonState.Pressed)
      {
         System.Diagnostics.Debug.WriteLine("Left mouse down");
      }
      Thread.sleep(1000);
   }
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Ale*_*lov 9

问题是你正在尝试混合两种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);
    }
}
Run Code Online (Sandbox Code Playgroud)