主题:[原创]达人帮帮我啊,关于线程的一个问题
达人帮我看看,下面是我的一个测试代码。当单击一个Button时,启动一个线程,这
个线程去执行
一个控件的方式,通过这个控件去控制硬件,这个SetPowerRelay(short)执行完需要
8s时间,
而这个线程去执行时,cpu占用很小的,但是界面很卡,拖都拖不动,而当
这个线程执行完后,界面又恢复正常,问这是什么原因啊?怎么改才能使得界面总是
正常的呢?
public partial class Form1 : Form
{
private Thread thread = null;
public Form1()
{
InitializeComponent();
Thread thisThread = Thread.CurrentThread;
thisThread.Priority = ThreadPriority.Highest;
}
private void button1_Click(object sender, EventArgs e)
{
thread = new Thread(new ThreadStart(SetStart));
thread.Priority = ThreadPriority.Lowest;
thread.Start();
}
private void SetStart()
{
axCL2005Ocx1.ComInitial((short)1, 38400, 100);
axCL2005Ocx1.SetLEDProperty((short)2, (short)1, (short)48, (short
)32, (short)1, 1);
axCL2005Ocx1.SetPowerRelay((short)0);
//SetPowerRelay此方法执行完需要8s时间,是封装好的,无法加入Sleep()
和DoEvents().
axCL2005Ocx1.CloseCL2005();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs
e)
{
if (!this.IsDisposed)
this.Dispose();
}
}
虽然没有用BeginInvoke和Invoke,但这个axCL2005Ocx1是个对象,很早就初始化好了
的啊,而且
不用BeginInvoke也不会造成这个样子啊。即使我开一个线程对button1.Text进行写
操作也不会这样子的啊
如:
private void button1_Click(object sender, EventArgs e)
{
thread = new Thread(new ThreadStart(threadst));
thread.Priority = ThreadPriority.Lowest;
thread.Start();
}
private void threadst()
{
long sum = 0;
try
{
while (true)
{
sum = 0;
for (int i = 0; i < 1000000; i++)
{
for (int j = 0; j < 1000000; j++)
{
for (int k = 0; k < 1000000; k++)
{
button1.Text=k.ToString(); //对button1.Text
进行写操作
sum++;
}
}
}
}
}
catch (ThreadAbortException)
{
Thread.ResetAbort();
}
}
即使这样,cpu占用率很高,但是界面也还是很流畅的啊。怎么我对那个控件就不能
做到界面流畅呢?
达人帮帮我啊,我为这个问题都头疼了好几天了。怎么解决啊?
个线程去执行
一个控件的方式,通过这个控件去控制硬件,这个SetPowerRelay(short)执行完需要
8s时间,
而这个线程去执行时,cpu占用很小的,但是界面很卡,拖都拖不动,而当
这个线程执行完后,界面又恢复正常,问这是什么原因啊?怎么改才能使得界面总是
正常的呢?
public partial class Form1 : Form
{
private Thread thread = null;
public Form1()
{
InitializeComponent();
Thread thisThread = Thread.CurrentThread;
thisThread.Priority = ThreadPriority.Highest;
}
private void button1_Click(object sender, EventArgs e)
{
thread = new Thread(new ThreadStart(SetStart));
thread.Priority = ThreadPriority.Lowest;
thread.Start();
}
private void SetStart()
{
axCL2005Ocx1.ComInitial((short)1, 38400, 100);
axCL2005Ocx1.SetLEDProperty((short)2, (short)1, (short)48, (short
)32, (short)1, 1);
axCL2005Ocx1.SetPowerRelay((short)0);
//SetPowerRelay此方法执行完需要8s时间,是封装好的,无法加入Sleep()
和DoEvents().
axCL2005Ocx1.CloseCL2005();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs
e)
{
if (!this.IsDisposed)
this.Dispose();
}
}
虽然没有用BeginInvoke和Invoke,但这个axCL2005Ocx1是个对象,很早就初始化好了
的啊,而且
不用BeginInvoke也不会造成这个样子啊。即使我开一个线程对button1.Text进行写
操作也不会这样子的啊
如:
private void button1_Click(object sender, EventArgs e)
{
thread = new Thread(new ThreadStart(threadst));
thread.Priority = ThreadPriority.Lowest;
thread.Start();
}
private void threadst()
{
long sum = 0;
try
{
while (true)
{
sum = 0;
for (int i = 0; i < 1000000; i++)
{
for (int j = 0; j < 1000000; j++)
{
for (int k = 0; k < 1000000; k++)
{
button1.Text=k.ToString(); //对button1.Text
进行写操作
sum++;
}
}
}
}
}
catch (ThreadAbortException)
{
Thread.ResetAbort();
}
}
即使这样,cpu占用率很高,但是界面也还是很流畅的啊。怎么我对那个控件就不能
做到界面流畅呢?
达人帮帮我啊,我为这个问题都头疼了好几天了。怎么解决啊?