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的做法,我不知道。谢谢!
答案 0 :(得分:2)
基本上每次单击按钮时,都会将另一个委托添加到具有相同代码的worker中。当你调用RunWorkerAsync()
时,它将执行第一个委托,你将得到你的“测试”结果,然后它将执行第二个委托(相同的代码)并将其设置回“ReTest”。
你可以通过点击3次来证明这一点,你应该看到“测试” - > “ReTest” - > “测试”。