c#打开线程实时监听句柄窗口是否关闭
时间: 2023-12-02 10:06:09 浏览: 87
基于MFC根据句柄关闭窗口
在C#中,可以使用多线程的方式来实现实时监听句柄窗口是否关闭的功能。具体实现方式如下:
```c#
using System;
using System.Runtime.InteropServices;
using System.Threading;
namespace WindowMonitor
{
class Program
{
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
static extern bool IsWindow(IntPtr hWnd);
static void Main(string[] args)
{
string windowTitle = "窗口标题"; // 替换为你要监听的窗口标题
IntPtr hWnd = FindWindow(null, windowTitle);
if (hWnd != IntPtr.Zero)
{
Thread thread = new Thread(() =>
{
while (IsWindow(hWnd))
{
// 窗口仍然有效,可以继续处理
// ...
Thread.Sleep(1000); // 每隔1秒检查一次
}
// 窗口已经关闭,可以进行相应处理
// ...
});
thread.Start();
}
}
}
}
```
该示例代码中,创建了一个新线程来监听指定窗口的状态。在主线程中,使用FindWindow函数查找指定窗口的句柄,并将句柄作为参数传递给新线程。然后在新线程中,使用IsWindow函数判断窗口是否仍然有效,并根据需要进行相应处理。
需要注意的是,当一个窗口关闭时,它的消息队列将被清空,因此在新线程中不能使用任何与窗口相关的消息函数(如SendMessage、PostMessage等),否则可能会导致不可预期的结果。
阅读全文