我在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)
如果从该线程中按下鼠标按钮,我该如何捕获?
谢谢
问题是你正在尝试混合两种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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5922 次 |
| 最近记录: |