gpt4 book ai didi

c# - Mouse.LeftButton == MouseButtonState.Pressed 从不返回 true

转载 作者:太空狗 更新时间:2023-10-30 00:24:11 25 4
gpt4 key购买 nike

我有一个用 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;Winform 图形用户界面:

按下开始按钮:

 ...
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);
}
}

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

谢谢

最佳答案

问题是您试图混合使用两种 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);
}
}

关于c# - Mouse.LeftButton == MouseButtonState.Pressed 从不返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28525564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com