这不起作用:
Debug.Assert(Thread.CurrentThread.Name == "Main Thread"); //doesn't work
//name is null despite name
//in debugger being "Main Thread"
这确实有效:
Debug.Assert(Thread.CurrentThread.ManagedThreadId == 1);
但我只是想知道:
ManagedThreadId
保证为1
吗?我正在开发一个Silverlight项目,我没有标记,因为我不知道它是否相关,但请注意,如果您相信Silverlight和其他.net运行时之间存在差异。
答案 0 :(得分:2)
Thread.CurrentThread.Name仅在设置名称时有效。我的猜测是调试器提供了一个默认名称。你可以设置线程的名称(在创建时,或者一旦你命中main,可能)?这样你可以检查断言。
类似的东西:
static void Main()
{
// Check whether the thread has previously been named
// to avoid a possible InvalidOperationException.
if(Thread.CurrentThread.Name == null)
{
Thread.CurrentThread.Name = "MainThread";
}
}
请参阅:http://msdn.microsoft.com/en-us/library/system.threading.thread.name.aspx
答案 1 :(得分:2)
将此代码放在应用程序的entry
方法中 -
static int mainThreadId;
// In Main method:
mainThreadId = System.Threading.Thread.CurrentThread.ManagedThreadId;
// If called in the non main thread, will return false;
public static bool IsMainThread
{
get
{
return System.Threading.Thread.CurrentThread.ManagedThreadId
== mainThreadId;
}
}
答案 2 :(得分:0)
检查IsBackground
属性。
这可能不是一个完美的解决方案,因为其他线程可以作为前台线程运行,但它可能足够了。