大家好:
首先有一个线程做图像采集:
imgProc_Task = new Thread(new ThreadStart(ImageProcessing));
imgproc_Task.start();
然后,在 ImageProcessing中没采集一次图像我会调用一个方法刷新一个控件的显示:
ShowlblImageCount_Invoke(intReadImageCount.ToString());
这个方法实现为:
public void ShowlblImageCount_Invoke(string str)
{
try
{
if (this.lblImageCount.InvokeRequired)
{
LblStrAction inst = new LblStrAction(Showlabel);
this.BeginInvoke(inst, this.lblImageCount, str);
}
else
{
Showlabel(this.lblImageCount, str);
}
}
catch (Exception e)
{
}
}
void Showlabel(Label lbl, string str)
{
try
{
lbl.Text = str;
}
catch (Exception ex)
{
}
}
到这里为止是没有问题的
然后同样在ImageProgressIng这个方法里新建一个线程:
Thread th2 = new Thread(new ThreadStart(new ThreadDeal((Bitmap)(bimage[bufferReadind].Clone())).ImageDealThread));
th2.Start();
其中ThreadDeal是一个封装方法的类,方法名叫ImageDealThread.
到此为止相当于是一个子子线程了。
执行ImageDealThread会调用一个方法,控制其他控件刷新:
ShowlblLogedCount_Invoke((VarSVCamera.V_I.g_IntLogedCount++ + 1).ToString());
使用的方法跟之前的一样
问题出现了,如果按照上面的逻辑去做,第一个控线显示是可以视线的,第二个就没反应了
在第二个实现方法中的control.invokeRequired一直为false.