1
我是多線程的新手,我一直在做一個概念驗證,我也發現了(VS2008)線程窗口: 試圖解釋(VS2008)線程窗口與什麼實際執行
我的問題是:我該如何將運行線程「鏈接」到我的代碼?例如,我將如何獲得線程ID(如線程窗口中所示),以便我可以記錄它(例如); BeginInvoke()方法需要一個我設置的'id'參數(字符串)(在下面的例子中爲「Service A」),但我在Threads窗口中看不到它。
我感興趣的事情是,我引發了執行使用AsyncCallbacks而BeginInvoke(的並行線程),但我只能看到在線程窗口兩個工作線程在一個地步,我想我應該能看到三。其實我想我可以 - 三個工作線程的'名稱'爲<No Name>
。
僅供參考這裏的一些我使用的代碼:
// Creating the call back and setting the call back delegate
AsyncCallback callBackA = new AsyncCallback(AsyncOperationACompleted);
// callBackB ...
// callBackC ...
// Create instances of the delegate, which calls the method we want to execute
callerA = new DumbEndPoint.AsyncMethodCaller(DumbEndPoint.PretendWorkingServiceCall);
// callerB ...
// callerC ...
// sleep = thread sleep time in milliseconds
IAsyncResult resultA = callerA.BeginInvoke(sleep, "Service A", callBackA, null);
// resultB ...
// resultC ...
// I expect to see three threads in the Threads Window at this point.
然後我得到的結果在回電話委託:
private void AsyncOperationACompleted(IAsyncResult result)
{
try
{
string returnValue = callerA.EndInvoke(result);
mySmartDTO.ServiceDataA = returnValue;
}
catch (Exception ex)
{
// logging
...
}
}
呀 - 我的位白癡。我剛剛意識到,在玩了更多:)後,一件事,但Thread.CurrentThread.ManagedThreadId返回一個完全不同的ID。 – 2011-03-15 04:17:59
@Adrian K:對於非託管線程ID(這是您在線程窗口中看到的),請參閱AppDomain.GetCurrentThreadId()。但是,可能存在託管線程ID與非託管線程ID不是一對一的情況。如果您使用此方法,您將得到的文檔和編譯器警告將進一步解釋細節。 – 2011-03-15 05:05:16