C# 后台线程的PostThreadMessage失败
我试图在C#wpf中从主线程向后台线程发送消息 后台线程如下所示:C# 后台线程的PostThreadMessage失败,c#,multithreading,winapi,C#,Multithreading,Winapi,我试图在C#wpf中从主线程向后台线程发送消息 后台线程如下所示: public class LoopThread() { public void Start() { User32.MSG msg; sbyte ret; while(true) { r
public class LoopThread()
{
public void Start()
{
User32.MSG msg;
sbyte ret;
while(true)
{
ret = User32.GetMessage(out msg, IntPtr.Zero, 0, 0);
//Here the debugger never reaches
......
}
}
}
以及主线:
LoopThread loop = new LoopThread();
Thread threadLoop = new Thread(loop.Start);
threadLoop.Start();
Thread.Sleep(100);
bool postResult = User32.PostThreadMessage(
Convert.ToUInt32(threadLoop.ManagedThreadId),
WM_USER + 1,
UIntPtr.Zero,
IntPtr.Zero);
但是postResult==false
。和GetLastWin32Error
返回ERROR\u INVALID\u THREAD\u ID
那么,错误在哪里?您需要将其发布到Win32线程ID。
ManagedThreadId
不是一回事。无论如何,你为什么要这么做?为什么不使用内置的.net机制将消息/事件排队到不同的线程上?@hristoilev这有点刻薄。很容易错过文档。不是每个人都知道一切。否则就不会存在。无论如何,如果我们知道我们的主机是一个简单的托管野兽,那么我猜托管线程和非托管线程之间有固定的关系。@DavidHeffernan,文本放在Thread
类文档主页上一个清晰可见的框中,而不是隐藏在某个模糊的页面上。因此,这是解决问题,而不是创建一个或另一个文档项目的副本。无论如何,如果已知关系已修复,您可以让线程调用Win32并将标识符存储在某个位置。非常感谢您的回复。