如何在C#(Visual Studio 2022)中使用Get-MpThreat获取威胁历史
线程历史记录实现方案(基于System.Diagnostics)
首先纠正下:你提到的“威胁历史记录”应该是线程(Thread)历史记录的拼写失误吧?下面是基于System.Diagnostics和.NET内置API的实现方案,不需要额外安装第三方包。
核心实现步骤与代码示例
1. 基础线程活动追踪与记录
通过自定义日志存储类,结合Thread类的属性记录线程的生命周期事件:
using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading; // 存储线程历史日志的静态类 public static class ThreadHistoryTracker { // 多线程场景建议用ConcurrentBag<string>避免线程安全问题 public static List<string> ThreadLogs = new List<string>(); public static void LogThreadAction(string actionDescription) { var thread = Thread.CurrentThread; var logEntry = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] 线程ID: {thread.ManagedThreadId} | 名称: {thread.Name ?? "未命名"} | {actionDescription}"; ThreadLogs.Add(logEntry); // 实时输出到控制台便于调试 Console.WriteLine(logEntry); } } // 示例工作线程逻辑 public class TaskWorker { public void RunTask() { ThreadHistoryTracker.LogThreadAction("任务启动"); try { // 模拟任务执行过程 Thread.Sleep(2000); ThreadHistoryTracker.LogThreadAction("执行核心任务"); Thread.Sleep(1500); } finally { ThreadHistoryTracker.LogThreadAction("任务结束"); } } } // 主程序调用示例 class Program { static void Main(string[] args) { // 创建并命名线程 var thread1 = new Thread(new TaskWorker().RunTask) { Name = "文件处理线程" }; var thread2 = new Thread(new TaskWorker().RunTask) { Name = "数据同步线程" }; thread1.Start(); thread2.Start(); // 等待所有线程完成 thread1.Join(); thread2.Join(); // 展示完整历史记录 Console.WriteLine("\n===== 线程历史记录汇总 ====="); foreach (var log in ThreadHistoryTracker.ThreadLogs) { Console.WriteLine(log); } } }
2. 用System.Diagnostics.Trace实现持久化日志
如果需要将记录保存到文件,System.Diagnostics.Trace是更专业的选择:
using System; using System.Diagnostics; using System.IO; using System.Threading; class Program { static void Main(string[] args) { // 将Trace输出写入日志文件 var fileListener = new TextWriterTraceListener(File.CreateText("ThreadActivity.log")); Trace.Listeners.Add(fileListener); Trace.AutoFlush = true; // 确保日志实时写入文件 var workerThread = new Thread(() => { Trace.WriteLine($"[{DateTime.Now}] 线程 {Thread.CurrentThread.ManagedThreadId} 启动"); Thread.Sleep(1800); Trace.WriteLine($"[{DateTime.Now}] 线程 {Thread.CurrentThread.ManagedThreadId} 执行中"); Thread.Sleep(1200); Trace.WriteLine($"[{DateTime.Now}] 线程 {Thread.CurrentThread.ManagedThreadId} 退出"); }); workerThread.Start(); workerThread.Join(); Trace.WriteLine("===== 追踪会话结束 ====="); fileListener.Close(); } }
关键提示
System.Diagnostics是.NET内置命名空间,无需安装任何NuGet包,直接引用即可。- 如果是UI应用(如WPF/WinForms),可以将
ThreadLogs绑定到列表控件,实现历史记录的实时展示。 - 多线程同时写入日志时,替换
List<string>为ConcurrentBag<string>,避免并发写入冲突。
内容的提问来源于stack exchange,提问作者SpaceCowboy
相关产品推荐
相关产品推荐

