我在用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(),
C# 使用BackgroundWorker避免while(true)死循环导致的界面阻塞

在C#开发中,使用while(true)创建的死循环可能导致界面阻塞。通过引入BackgroundWorker控件,可以在后台线程执行循环任务,保持界面响应。在button1_Click事件中启动BackgroundWorker,循环读卡操作放在backgroundWorker1_DoWork方法中,当需要停止时,通过button2_Click事件调用CancelAsync()方法取消操作。
最低0.47元/天 解锁文章
1606





