我想獲取當前行程的所有執行緒,并查看某一指定執行緒的狀態或運行時間
Process current = Process.GetCurrentProcess();
ProcessThreadCollection allThreads = current.Threads;
現在我能獲得所有執行緒的執行緒ID,但是無法識別某一執行緒是否是我的目標執行緒。
因為在執行緒啟動時可以指定執行緒名稱,這樣就可以通過指定名稱來判斷某一執行緒的狀態。所以我想通過執行緒ID來獲取執行緒名稱,這樣就可以識別我的目標執行緒了。
但是如何通過執行緒ID來獲取執行緒名稱呢?
uj5u.com熱心網友回復:
直接把執行緒加到List<Thread>里吧
Thread tempThread = threadList.Where(x => x.Name == "測驗執行緒名稱").FirstOrDefault();
if (tempThread != null)
{
Console.WriteLine(tempThread.ThreadState);
}
uj5u.com熱心網友回復:
你確定你給每個執行緒都賦予名稱了嗎,執行緒默認名稱可能是空的。如果你要靠為執行緒賦予名稱來定位執行緒,那和把執行緒ID存入List<int>,不是一樣的效果?uj5u.com熱心網友回復:
現在的情況是有一個監視執行緒,來監視其他執行緒的狀態(一部分執行緒)。程式的運行程序中,隨時都會有新的執行緒啟動與終了。
如果通過這種方法來維護過于復雜,所以想隨用隨取。
uj5u.com熱心網友回復:
求大神解答~~~~~~uj5u.com熱心網友回復:
定義一個全域的map,其中以執行緒i的為key,執行緒名稱為value,每次新執行緒啟動就保存進去,執行緒結束就洗掉,這樣就可以根據名稱確認是不是你的目標執行緒了。uj5u.com熱心網友回復:
這個方法和一樓提供的方法類似,都是將啟動的執行緒保存下來,還是覺得這樣過于復雜,想尋找更為快捷方便的解決方法,如果實在沒有更好的解決方案,也只能這樣做了
uj5u.com熱心網友回復:
怎么可能會有便捷的方法?不保留的話你都沒有比較的依據。。。。。后面的就沒法進行了。。。
uj5u.com熱心網友回復:
真不知道你說的怎么就復雜了,你新建一個執行緒添加一下就麻煩了?而且ProcessThreadCollection里面得到的是ProcessThread
System.Diagnostics.ProcessThread
和
System.Threading.Thread
兩個完全不是一個型別,沒有任何什么聯系
System.Diagnostics.ProcessThread表示當前非托管執行緒
System.Threading.Thread 是托管執行緒
ProcessThread也根本沒有什么名稱這個屬性
uj5u.com熱心網友回復:
其實這個問題很好解決,也不用取得執行緒名稱,在你設執行緒名的時候,把執行緒名稱設成和執行緒ID一樣就可以了!這樣直接ID就可以當成名稱用了uj5u.com熱心網友回復:
或許樓主跟我一樣是想檢查各執行緒的運行情況吧?我們是程式里的執行緒用太多了、導致沒控制好會經常出現多出的執行緒無法被回收,時間一長就越積越多,所以想找出原因
本想通過設定執行緒 Name 做備注進行列印檢查,沒想到 ProcessThreadCollection 居然看不到 Name
樓上的方法通過 List.Add(Thread) 雖然也能實作、但是有些勉強~
按理能獲取當前所在 Thread 的 Name、應該是會有方法能獲取所有 Thread 的 Name 的
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/87619.html
標籤:C#
上一篇:c# 下 如何監聽 webBrowser 控制元件打開的網頁所發送和接收到的所有請求。
下一篇:c#readline
