You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:32:54