我是多线程的新手,我一直在做一个概念验证,我也“发现”了(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
...
}
}
答案 0 :(得分:2)
您可以使用Thread.Name为线程设置名称。设置名称后,它将出现在“线程”窗口的“名称”列中。
例如,假设Service A
是您希望在“线程”窗口的“名称”列中显示的名称,您可以在PretendWorkingServiceCall
中执行以下操作:
void PretendWorkingServiceCall(int sleepMilliseconds, string name)
{
System.Threading.Thread.CurrentThread.Name = name;
// your code goes here
}