很困惑,有时候,需要用到“不停的”,“循环”,“条件循环”的执行某一段操作时。我都开个线程去执行这个方法。看例子:
if (readPCI == null || readPCI.IsAlive == false)
{
readPCI = new Thread(new ThreadStart(readPCIDdata));
readPCI.Start();
}
---------------------------------------------------------------------
private delegate void readPCI();
private void readPCIDdata()
{
if (hDevice != (IntPtr)(-1))
{
if (!tabControl.InvokeRequired)
{
Int32 Return = PCI8735.PCI8735_ReadDeviceAD(hDevice, ADBuffer, nReadSizeWord, ref nRetSizeWord);
if (Return != 0)
{
while (autorun)
{
Thread.Sleep(1000);
if (PCI8735.PCI8735_ReadDeviceAD(hDevice, ADBuffer, nReadSizeWord, ref nRetSizeWord) <= 0)//连续地读取AD数据
{
StatusLabel.Text = "AD数据读取失败!";
}
else
{
deleWindData();
flag++;
}
StatusLabel.Invalidate();
tabControl.Invalidate();
Begin.Invalidate();
}
}
else
{
StatusLabel.Text = "PCI8735采集卡读取AD数据出错";
}
}
else
{
readPCI read = new readPCI(readPCIDdata);
Invoke(read);
}
}
}
但是,去执行这个线程的时候,程序还是卡住了,想请教一下,在C#里面,如何最优的使用线程!!Thank you
if (readPCI == null || readPCI.IsAlive == false)
{
readPCI = new Thread(new ThreadStart(readPCIDdata));
readPCI.Start();
}
---------------------------------------------------------------------
private delegate void readPCI();
private void readPCIDdata()
{
if (hDevice != (IntPtr)(-1))
{
if (!tabControl.InvokeRequired)
{
Int32 Return = PCI8735.PCI8735_ReadDeviceAD(hDevice, ADBuffer, nReadSizeWord, ref nRetSizeWord);
if (Return != 0)
{
while (autorun)
{
Thread.Sleep(1000);
if (PCI8735.PCI8735_ReadDeviceAD(hDevice, ADBuffer, nReadSizeWord, ref nRetSizeWord) <= 0)//连续地读取AD数据
{
StatusLabel.Text = "AD数据读取失败!";
}
else
{
deleWindData();
flag++;
}
StatusLabel.Invalidate();
tabControl.Invalidate();
Begin.Invalidate();
}
}
else
{
StatusLabel.Text = "PCI8735采集卡读取AD数据出错";
}
}
else
{
readPCI read = new readPCI(readPCIDdata);
Invoke(read);
}
}
}
但是,去执行这个线程的时候,程序还是卡住了,想请教一下,在C#里面,如何最优的使用线程!!Thank you
tabControl.Invalidate();
Begin.Invalidate();这3句,刷太狠了吧。
StatusLabel.Text = "AD数据读取失败!";