我在用c#做一个读卡器,过程中需要点击button进行循环读卡,再点击另一个button停止,我一看到循环读卡就想到while(true)让他一直读,循环读卡的确可以实现,但是之后却无法跳出循环,导致界面锁定,没办法进行操作,最终崩溃。查了好久才知道是属于线程阻塞,会导致初始界面无法使用
解决方法就是c#中的控件backgroundworker,在你想用的button中调用这个控件,之后在backgroundworker中执行你的循环,
代码如下
private void button1_Click(object sender, EventArgs e)//开始执行按钮
{
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)//你要执行的代码
{
int ret;
int iPort = 1;
ret = InitComm(iPort);
if (ret == 1)
{
int x;
StringBuilder name = new StringBuilder(), gender = new StringBuilder(), folk = new StringBuilder(), birthday = new StringBuilder(), code = new StringBuilder(), address = new StringBuilder(), agency = new StringBuilder(),