2013-03-20 49 views
0

我有一个函数,我把断点,可以看到它是在不同的线程以外的UI线程我的意思是工作线程.i检查线程窗口为此,当我检查线程是什么创建并开始,我无法找到。即使我检查调用堆栈also.When我钻我只能看到那些东西开始如何知道线程开始

System.dll!System.Net.LazyAsyncResult.Complete(System.IntPtr userToken) + 0x6c bytes 

mscorlib.dll!System.Threading._IOCompletionCallback.PerformIOCompletionCallback(uint errorCode, uint numBytes, System.Threading.NativeOverlapped* pOVERLAP) + 0x74 bytes 

我们是否有任何机制来找到thread.My目标的起点就是结束改变工作线程的线程的aprtmentmodel

+0

请显示你的函数绑定到系统其余部分的代码(看起来像一些异步执行,任务,不管) – 2013-03-20 14:38:02

+0

@Zdeslav Vojkovic我发布了代码,否则循环部分被限制在系统的其余部分,我的目标是为此线程设置STA aprtment,但为此我需要查看它创建的位置 – vettori 2013-03-20 14:44:50

+0

尝试并找到发起启动IO操作的重叠读/写调用的线程。 – 2013-03-20 15:24:52

回答

6

由于你正在做一些套接字操作,并且线程显然是以IO完成回调开始的,我的心理能力告诉我这是一个IO完成线程。它通知您,在该套接字上启动的异步IO操作是由网卡完成的。

我的目的是改变工作线程的线程

您没有启动该线程的aprtmentmodel;网络套接字层可能做到了。如果我是你,我不会试图改变这种状况。

+1

对此+1:“我的心灵力量告诉我......” – JerKimball 2013-03-20 15:03:04

+1

嗯...... IIRC,IO完成回调排队作为一个APC的用户线程,通常等待在一个alertable州。在某处,应该有一个线程发出重叠的读/写,然后等待'blahEx()'可警告的等待呼叫。 – 2013-03-20 15:22:58

+0

@MartinJames:你对这个机制的了解显然超过了我的。考虑发布一个答案! – 2013-03-20 15:26:23