c# 窗体backgroundworker

函数里flag==1;data.RunWorkerAsync();while(flag_read==1);然后我发现有了这个while,连这个background进程都不... 函数里
flag==1;
data.RunWorkerAsync();
while (flag_read==1) ;

然后我发现有了这个while,连这个background进程都不进去了,求解?!
展开
 我来答
shuibiyy
2014-10-11 · TA获得超过1724个赞
知道小有建树答主
回答量:446
采纳率:100%
帮助的人:142万
展开全部

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) 
              {
              }
        }
freeeeeewind
2014-10-11 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1342万
展开全部

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);循环是在主线程上进行死循环的。而主线程负责用户界面的刷新已经响应用户的输入,这个死循环导致主线程无法及时处理用户的输入(键盘、鼠标输入)和刷新,使得程序"假死"——不响应用户的操作了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式