c# 怎样获得想要的线程ID

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 怎样获得想要的线程ID相关的知识,希望对你有一定的参考价值。

不是当前的
大侠们能指出相应的参数吗 在下感激不尽

参考技术A GetThreadId 根据线程句柄得到线程ID。

GetWindowThreadProcessId ,根据窗口句柄得到此窗口所在线程的ID(也同时得到进程的ID)

OpenThread,能根据ID得到线程的句柄本回答被提问者采纳
参考技术B 这个问题给100分。。。你很大方啊。
GetThreadId 根据线程句柄得到线程ID。

GetWindowThreadProcessId ,根据窗口句柄得到此窗口所在线程的ID(也同时得到进程的ID)

OpenThread,能根据ID得到线程的句柄

获取在关联进程中运行的一组线程:Process.Threads 属性
获取线程的唯一标识符:ProcessThread.Id
参考技术C 获取在关联进程中运行的一组线程:Process.Threads 属性
获取线程的唯一标识符:ProcessThread.Id
参考技术D 必须借助于系统---下面是windows操作系统---例如你要将启动的一个Excel进程中的某个线程获取到,并且关闭,要求此时不影响其他使用。可以操作如下:
[System.Runtime.InteropServices.DllImport("User32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
private static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
private void Kill(Microsoft.Office.Interop.Excel.Application excel)

IntPtr t = new IntPtr(excel.Hwnd); //得到这个句柄,具体作用是得到这块内存入口

int k = 0;
GetWindowThreadProcessId(t, out k); //得到唯一标志k
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //k的引用
p.Kill(); //关闭k
第5个回答  2009-09-23 System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcesses();
bool foundProcess = false;
System.Diagnostics.ProcessThreadCollection threads = null;
System.Threading.Thread thread = null;
foreach (System.Diagnostics.Process p in processes)

if (p.ProcessName == "notepad")

threads = p.Threads;
foundProcess = true;
break;


if (foundProcess)

foreach (System.Threading.Thread th in threads)

if (th.Name == "xxxxx")

thread = th;
break;




if (thread != null)

// 不知道threadId是不是你说的线程ID.
int threadId = thread.ManagedThreadId;

C# 中的线程上下文到底是啥?

【中文标题】C# 中的线程上下文到底是啥?【英文标题】:What exactly is the thread context in C#?C# 中的线程上下文到底是什么? 【发布时间】:2013-05-29 16:08:43 【问题描述】:

我有一个 WCF 服务,它记录对数据库的每次调用。稍后,如果发生异常,也会将其记录到单独的数据库中。

我想要一种将这两个日志绑定在一起的方法,以便我们查看可能导致异常的原因。为此,我需要某种可以在每次调用时获得的唯一 ID。

由于整个事情是在单个线程上执行的,例如,我可以将线程名称设置为 GUID,例如。 System.Threading.Thread.CurrentThread.Name = Guid.NewGuid().ToString(); 但这有点 hacky。

在网上搜索,我发现了System.Threading.Thread.CurrentContext.SetProperty(),但我想知道这个上下文到底是什么。它是否旨在在线程期间存储属性?每个线程是否唯一?

如果我有 5 个同时 WCF 调用,我不希望上下文中发生的事情之间存在任何冲突,如果它不是“每次调用”的话。

有人可以澄清一下吗?

【问题讨论】:

【参考方案1】:

我不会使用该属性,因为 Microsoft 说它仅供内部使用:

"This API supports the .NET Framework infrastructure and is not intended to be used directly from your code."

但是,您应该能够使用Thread Local Storage 来做同样的事情。该链接提供了一个示例,展示了如何为线程设置字符串属性。

另见http://www.c-sharpcorner.com/UploadFile/1d42da/working-with-thread-local-storagetls-in-C-Sharp/

【讨论】:

作为更新,如果您使用的是 .NET 4.6,您应该从使用 ThreadLocal 切换到 AsyncLocal,这允许您的存储流过 async/await 边界,最终可能会跳转线程。

以上是关于c# 怎样获得想要的线程ID的主要内容,如果未能解决你的问题,请参考以下文章

VC如何获得当前线程的ID

C# 使用线程池设置每个线程的执行时间,怎样设置结束时间?

c#中怎样让两个函数同时执行

c#下怎样获得contextmenustrip动态添加的二级菜单项的文本

c# 如何获得combobox的下拉表中选中项id的值

我怎样才能获得贝宝的商家帐户 ID?