C# 试图用实际执行的内容解释(VS2008)线程窗口
我是多线程新手,我一直在进行概念验证,我还“发现”了(VS2008)线程窗口: 我的问题是:如何将正在运行的线程“链接”到我的代码? 例如,如何获取线程ID(如Threads窗口中所示),以便记录它(例如)或,BeginInvoke()方法接受我设置的“id”参数(字符串)(在下面的示例中为“服务a”),但我在Threads窗口中看不到它 我感兴趣的是,我使用AsyncCallbacks和BeginInvoke()启动了三个并行执行线程,但在threads窗口中我只能看到两个工作线程,而我认为应该看到三个。事实上,我认为我可以-三个工作线程的“名称”为C# 试图用实际执行的内容解释(VS2008)线程窗口,c#,.net,visual-studio,multithreading,asynchronous,C#,.net,Visual Studio,Multithreading,Asynchronous,我是多线程新手,我一直在进行概念验证,我还“发现”了(VS2008)线程窗口: 我的问题是:如何将正在运行的线程“链接”到我的代码? 例如,如何获取线程ID(如Threads窗口中所示),以便记录它(例如)或,BeginInvoke()方法接受我设置的“id”参数(字符串)(在下面的示例中为“服务a”),但我在Threads窗口中看不到它 我感兴趣的是,我使用AsyncCallbacks和BeginInvoke()启动了三个并行执行线程,但在threads窗口中我只能看到两个工作线程,而我认为
以下是我使用的一些代码供参考:
// 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.Name来设置线程的名称。设置名称后,它将出现在“线程”窗口的“名称”列中 e、 例如,假设
服务A
是您希望出现在Threads窗口的name列中的名称,您可以在假装工作服务调用中执行类似操作:
void PretendWorkingServiceCall(int sleepMilliseconds, string name)
{
System.Threading.Thread.CurrentThread.Name = name;
// your code goes here
}
是的,我有点傻。我刚刚意识到,在玩了更多的游戏之后:)有一件事,Thread.CurrentThread.ManagedThreadId返回了一个完全不同的id。@Adrian K:对于非托管线程id(您在Threads窗口中看到的),请参阅AppDomain.GetCurrentThreadId()
。但是,可能存在托管线程ID与非托管线程ID不是一对一的情况。如果使用此方法,您将得到的文档和编译器警告将进一步解释详细信息。