先上代码 代码比较多 注释掉部分代码
private bool startFlag=false;
protected bool _enableLeaveCancel = true; //先后初始化_scanEnterThread _scanLeaveThread 这两个线程
_scanEnterThread = new Thread(scanEnterSensorChannel);
_scanEnterThread.Start();
...
_scanLeaveThread = new Thread(scanLeaveSensorChannel);
_scanLeaveThread.Start();
private void scanEnterSensorChannel()
{
while (true)
{
if (!startFlag)
{
_enterProcessingThread = new Thread(invokeEnterProcessing);
_enterProcessingThread.Start();
_enterProcessingThread.Join();
}
}
} private void scanLeaveSensorChannel()
{
while (true)
{
if (startFlag)
{
if (_enableLeaveCancel)
{
_leaveProcessingThread = new Thread(invokeLeaveProcessing);
_leaveProcessingThread.Start();
_leaveProcessingThread.Join();
}
_enableLeaveCancel = true;
}
} private void invokeEnterProcessing()
{
startFlag = true;
this.Proccessor();//这个方法中存在一个线程池 且方法执行需要一段时间
startFlag = false;
} private void invokeLeaveProcessing()
{
if (_enterProcessingThread != null)
_enterProcessingThread.Abort();
.....
}问题是这样的:先后实例化_scanEnterThread 、_scanLeaveThread 线程 在scanEnterSensorChannel方法中执行invokeEnterProcessing线程 试图将startFlag 变为true ,以便在_leaveProcessingThread 获取值执行后面的方法。但是我实际运行中发现invokeEnterProcessing()正常运行,但是在执行scanLeaveSensorChannel()时,发现startFlag =false,并没变为true 且经过其他手段测试发现_enterProcessingThread =null。 请问这是为什么,怎么解决?
private bool startFlag=false;
protected bool _enableLeaveCancel = true; //先后初始化_scanEnterThread _scanLeaveThread 这两个线程
_scanEnterThread = new Thread(scanEnterSensorChannel);
_scanEnterThread.Start();
...
_scanLeaveThread = new Thread(scanLeaveSensorChannel);
_scanLeaveThread.Start();
private void scanEnterSensorChannel()
{
while (true)
{
if (!startFlag)
{
_enterProcessingThread = new Thread(invokeEnterProcessing);
_enterProcessingThread.Start();
_enterProcessingThread.Join();
}
}
} private void scanLeaveSensorChannel()
{
while (true)
{
if (startFlag)
{
if (_enableLeaveCancel)
{
_leaveProcessingThread = new Thread(invokeLeaveProcessing);
_leaveProcessingThread.Start();
_leaveProcessingThread.Join();
}
_enableLeaveCancel = true;
}
} private void invokeEnterProcessing()
{
startFlag = true;
this.Proccessor();//这个方法中存在一个线程池 且方法执行需要一段时间
startFlag = false;
} private void invokeLeaveProcessing()
{
if (_enterProcessingThread != null)
_enterProcessingThread.Abort();
.....
}问题是这样的:先后实例化_scanEnterThread 、_scanLeaveThread 线程 在scanEnterSensorChannel方法中执行invokeEnterProcessing线程 试图将startFlag 变为true ,以便在_leaveProcessingThread 获取值执行后面的方法。但是我实际运行中发现invokeEnterProcessing()正常运行,但是在执行scanLeaveSensorChannel()时,发现startFlag =false,并没变为true 且经过其他手段测试发现_enterProcessingThread =null。 请问这是为什么,怎么解决?
Thread th = new Thread(new ParameterizedThreadStart(method));
th.Start("参数"));
private void method(string s)
{}
或
Thread thread1 = new Thread(() => { Run(参数); });
thread1.Start();