c# 怎样获得想要的线程ID
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 怎样获得想要的线程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的主要内容,如果未能解决你的问题,请参考以下文章