Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 后台线程的PostThreadMessage失败_C#_Multithreading_Winapi - Fatal编程技术网

C# 后台线程的PostThreadMessage失败

C# 后台线程的PostThreadMessage失败,c#,multithreading,winapi,C#,Multithreading,Winapi,我试图在C#wpf中从主线程向后台线程发送消息 后台线程如下所示: public class LoopThread() { public void Start() { User32.MSG msg; sbyte ret; while(true) { r

我试图在C#wpf中从主线程向后台线程发送消息

后台线程如下所示:

        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并将标识符存储在某个位置。非常感谢您的回复。