c# 窗体backgroundworker
函数里flag==1;data.RunWorkerAsync();while(flag_read==1);然后我发现有了这个while,连这个background进程都不...
函数里
flag==1;
data.RunWorkerAsync();
while (flag_read==1) ;
然后我发现有了这个while,连这个background进程都不进去了,求解?! 展开
flag==1;
data.RunWorkerAsync();
while (flag_read==1) ;
然后我发现有了这个while,连这个background进程都不进去了,求解?! 展开
2个回答
展开全部
backgroundworker 是一个后面线程。当然也是可以自己声明个线程来处理。
不管理你是使用backgroundworker 或者线程都要正开启执行才能正常使用。
你用 backgroundWorker1时如下:
backgroundWorker1.RunWorkerAsync();//开始执行后台操作。这样你的
backgroundworker线程才能正常使用
public Form1()
{
InitializeComponent();
backgroundWorker1.RunWorkerAsync();
}
flag==1;
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (flag_read==1)
{
}
}
展开全部
1)【问题原因】
flag_read=1;
data.RunWorkerAsync();
//问题原因:在这个while处死循环了!
while (flag_read==1) ; //<--死循环
2)【解决办法】
如果你采用BackgroundWorker来执行后台操作,可以用BackgroundWorker提供的结束操作事件来处理后台操作结束时的操作
//当backgroundWorker做完后发生的事件
backgroundWorker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(this.bkWorkerCompleted);
private void bkWorkerCompleted(object sender, DoWorkEventArgs e)
{
//在此写处理后台操作完成的代码
}
更多追问追答
追问
是这样的,我在后台执行完的地方坐了flag=0的操作 为什么还是不行?
追答
那个while(flag_read==1);循环是在主线程上进行死循环的。而主线程负责用户界面的刷新已经响应用户的输入,这个死循环导致主线程无法及时处理用户的输入(键盘、鼠标输入)和刷新,使得程序"假死"——不响应用户的操作了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询