2013-03-20 82 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