C# 处理来自不同线程的线程的最佳方法是什么?
我的要求是处理来自不同线程的线程。我可以处理C# 处理来自不同线程的线程的最佳方法是什么?,c#,multithreading,thread-safety,C#,Multithreading,Thread Safety,我的要求是处理来自不同线程的线程。我可以处理thread.Suspend()、thread.Resume()和thread.Abort()但是我收到了一个警告,好像这些方法已经被弃用了。如果有任何替代这些方法的方法,我创建了一个虚拟控制台应用程序,它与我的应用程序类似,请帮助解决这个问题。 下面是我的代码 using System; using System.Threading; namespace ThreadingTest { internal class Program
thread.Suspend()
、thread.Resume()
和thread.Abort()
但是我收到了一个警告,好像这些方法已经被弃用了。如果有任何替代这些方法的方法,我创建了一个虚拟控制台应用程序,它与我的应用程序类似,请帮助解决这个问题。
下面是我的代码
using System;
using System.Threading;
namespace ThreadingTest
{
internal class Program
{
private static Thread mainThread;
private static void Main(string[] args)
{
mainThread = Thread.CurrentThread;
Thread connectServerThread = new Thread(new ThreadStart(ConnectServer));
connectServerThread.Start();
int i = 0;
while (true)
{
if (i++ % 5000 == 0)
{
Console.WriteLine(i);
}
}
}
private static void ConnectServer()
{
for (int i = 0; i < 20; i++)
{
Thread.Sleep(2000);
if (i % 2 == 0)
{
mainThread.Suspend();
}
else
{
mainThread.Resume();
}
}
mainThread.Abort();
}
}
}
使用系统;
使用系统线程;
命名空间线程测试
{
内部课程计划
{
私有静态线程主线程;
私有静态void Main(字符串[]args)
{
mainThread=Thread.CurrentThread;
线程connectServerThread=新线程(新线程开始(ConnectServer));
connectServerThread.Start();
int i=0;
while(true)
{
如果(i++%5000==0)
{
控制台写入线(i);
}
}
}
私有静态void ConnectServer()
{
对于(int i=0;i<20;i++)
{
《睡眠》(2000年);
如果(i%2==0)
{
mainThread.Suspend();
}
其他的
{
mainThread.Resume();
}
}
mainThread.Abort();
}
}
}
我会按照
不要使用Suspend和Resume方法来同步线程的活动。挂起线程时,无法知道线程正在执行什么代码。如果在安全权限评估期间挂起一个线程,而该线程持有锁,则AppDomain中的其他线程可能会被阻止。如果在线程执行类构造函数时挂起该线程,则AppDomain中尝试使用该类的其他线程将被阻止。死锁很容易发生
更具体地说,警告提供了以下建议:
请使用System.Threading中的其他类(如监视器、互斥体、事件和信号量)来同步线程或保护资源
我总是希望线程类中有一个标志(isRunning)和一个while(isRunning){…},然后您可以从外部将该标志设置为false。您应该只向线程发送一个请求,并让线程(代码)自行管理如何处理该请求。如果线程正在向文件写入数据,而您挂起或中止了它,该怎么办?它将以损坏的数据结束。但在我的情况下,我必须执行500个步骤或一行代码,如果我设置了一个标志,那么在每个步骤中,我都需要检查该标志,这对我来说是不可行的。@SirRufo它是一个虚拟应用程序,不是实际的,它的实现是不同的。我一般说的是线程/任务