liu8359 发表于 2023-5-10 16:44

C#多线程咨询ConcurrentQueue

C#可以杀掉ConcurrentQueue中的某个进程吗

13570648032 发表于 2023-5-10 16:50

面向chartGPT编程
不好意思,我的前一篇回答可能有些误导。ConcurrentQueue只是一个线程安全的队列,并不能直接对进程进行操作,但是可以将需要杀死的进程的进程ID添加到队列中,再在另一个线程中使用Process类对该进程进行操作,如杀死进程。

以下是一个简单的示例:

```
using System;
using System.Collections.Concurrent;
using System.Diagnostics;
using System.Threading;

class Program
{
    static ConcurrentQueue<int> processQueue = new ConcurrentQueue<int>();

    static void Main()
    {
      // 添加进程ID到队列中
      processQueue.Enqueue(1234);

      // 启动后台线程
      Thread thread = new Thread(ProcessQueue);
      thread.IsBackground = true;
      thread.Start();

      // 程序继续执行
      Console.WriteLine("Do something else here...");
    }

    static void ProcessQueue()
    {
      // 不断循环处理队列,直到队列为空
      while (processQueue.TryDequeue(out int processId))
      {
            try
            {
                Process.GetProcessById(processId).Kill();
                Console.WriteLine("Process with ID {0} has been killed.", processId);
            }
            catch (ArgumentException)
            {
                Console.WriteLine("Process with ID {0} does not exist.", processId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed to kill process with ID {0}. Error message: {1}.", processId, ex.Message);
            }
      }
    }
}
```

上述代码创建了一个`ConcurrentQueue`,将需要杀死的进程ID添加到队列中,再通过启动一个后台线程来处理队列。后台线程不断循环处理队列,直到队列为空,每次取出队列的第一个进程ID,使用`Process.GetProcessById()`方法获取该进程的`Process`实例并杀死进程。如果进程不存在,则输出相应的提示信息。

liu8359 发表于 2023-5-10 17:18

13570648032 发表于 2023-5-10 16:50
面向chartGPT编程
不好意思,我的前一篇回答可能有些误导。ConcurrentQueue只是一个线程安全的队列,并 ...

谢谢,就是不想加锁,想看看有没有简单的方法

goldli 发表于 2023-5-10 18:48

不加锁? ConcurrentQueue 本身就带锁。
页: [1]
查看完整版本: C#多线程咨询ConcurrentQueue