C#BackgroundWorker循环回来问题

时间:2011-03-10 20:15:26

标签: c# multithreading backgroundworker

private void btnTest_Click(object sender, RoutedEventArgs e)
{
    try
    {
        worker.DoWork += delegate(object s, DoWorkEventArgs args)
        {
            if (flag == false)
            {
                setBtnText(btTest, "ReTest"); 
                flag = true;
            }
            else
            {
                setBtnText(btTest, "Test");
                flag = false;
            }
        };

        worker.RunWorkerAsync();
    }
    catch (Exception ex)
    {
        ErrorLogger(ex, "");
    }
}  

好的,这非常令人沮丧。也许我只是一个大脑放屁。基本上我是按一个按钮做1/2操作,具体取决于标志的设置方式。当我第一次单击btTest时,它可以正常工作并将按钮文本设置为重新测试。现在,如果我再次单击它,它会将其设置为Test,但然后循环回到开头并将其设置回ReTest。我不明白为什么它会循环回来。它应该做if if else。如果(单击1),则不是,如果(单击2),则重复新单击。应该(在我看来),如果(单击1),否则(单击2),重复新单击。请帮我理解这个。也许这就是DoWork的做法,我不知道。谢谢!

1 个答案:

答案 0 :(得分:2)

基本上每次单击按钮时,都会将另一个委托添加到具有相同代码的worker中。当你调用RunWorkerAsync()时,它将执行第一个委托,你将得到你的“测试”结果,然后它将执行第二个委托(相同的代码)并将其设置回“ReTest”。

你可以通过点击3次来证明这一点,你应该看到“测试” - > “ReTest” - > “测试”。