Bir işlem olarak, bir süreç içindeki O/S süreçlerini ve O/S iş parçacıklarını görüntülemek için bir kod yazıyordum (Sysinternals process explorer gibi). _real_ thread kimliğini CLR "arkadaşça" şekilde nasıl edinebilirim?
O .NET'in ManagedThreadId (ler) O/S iplik kimlikleri değildir bulundu. Biraz okumadan sonra AppDomain.GetCurrentThreadId() ile karşılaştım. Ne yazık ki, bu işlev "eskimiş" olarak işaretlenmiştir (bu, gelecekte "mevcut değil" anlamına gelebilir). Bulduğum bir çözüm, doğrudan Win32 GetCurrentThreadId çağırmak için InteropServices kullanmaktır. Bununla iyiyim, ama .net felsefesine karşı geliyor.Sorum şu: Bir CLR akım dişin gerçek kimliği elde etme "dost" yolu var mı? Başvuru için
, burada şimdiye kadar ne denedim gösteren kod snippet'idir. // 1 ve // 2 ekran doğru diş kimliği // 3 ve // 4 bir CLR dostu bir şekilde aynı bilgi edinme girişimleri vardı (ama çalışmıyor.)
Yardımlarınız için teşekkür ederim
John.
[DllImport("kernel32.dll")]
static extern int GetCurrentThreadId();
static void Main(string[] args)
{
// AppDomain.GetCurrentThreadId() is "obsolete"
int ThreadId1 = AppDomain.GetCurrentThreadId(); // 1
// not the ".net" way of doing things
int ThreadId2 = GetCurrentThreadId(); // 2
// "no joy" attempts to get the same results I got above
int ThreadId3 = Process.GetCurrentProcess().Threads[0].Id; // 3
int ThreadId4 = Thread.CurrentThread.ManagedThreadId; // 4
Console.WriteLine("ThreadId1: {0}, ThreadId2: {1}, ThreadId3: {2}, " +
"ThreadId4: {3}",
ThreadId1, ThreadId2, ThreadId3, ThreadId4);
}
Neden CLR istemek sadece CLR "düşmanca" işlemlerini yürütmek hangi üzerinde "düşmanca" verileri CLR bir parça almak için "Dost" yolu olur? – Polity
@Polity: Sistem yardımcı programlarını yazıyorum ve çoğunun .net ile hiçbir ilgisi yok. Eğer .net programladığımda, ilgilendiğim bilgiler .net ortamıyla ilgili olmasa bile .net için "dost" olmak isterim. – Hex440bx
Eh, benim durumum geçerli kalıyor :) Bir arabanın bir parçasını çelikten, diğerini tahtadan inşa etmek için bir sebep yok. Sadece yerel sistem API'leri ile kullanmak için yerel bir threadID i .NET dostu bir yol elde etmek için bir neden yoktur gibi. Bu durumda win32'nin GetCurrentThreadId kullanımı mükemmel bir şekilde geçerlidir! – Polity