【问题标题】:C# BackgroundWorker looping back issuesC# BackgroundWorker 循环返回问题
【发布时间】:2011-03-11 04:22:34
【问题描述】:
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 时,它可以正常工作并将按钮文本设置为重新测试。现在,如果我再次单击它,它会将其设置为测试,但随后会循环回到开头并将其设置回重新测试。我不明白为什么它会循环回来。它应该做 if 或 else。 Not if (click 1), else to if (click 2), 在新的点击时重复。它应该(在我看来),如果(点击 1),否则(点击 2),重复新的点击。请帮助我理解这一点。也许这就是 DoWork 做事的方式,我不知道。谢谢!

【问题讨论】:

  • 您实际上是在每次点击附加一个代表,对吧?所以基本上,在第二次单击时,您会调用委托两次。

标签: c# multithreading backgroundworker


【解决方案1】:

基本上每次单击按钮时,您都会使用相同的代码向工作人员添加另一个委托。当您调用RunWorkerAsync() 时,它将执行第一个委托,您将获得“测试”结果,然后它将执行第二个委托(相同的代码)并将其设置回“重新测试”。

您可以通过单击它 3 次来证明这一点,您应该会看到“测试”->“重新测试”->“测试”。

【讨论】:

  • 哦,哇.. 这很有意义。我什至没有想到这一点。我对这个线程的东西很陌生。但是那个 += 使一切变得不同。谢谢!
猜你喜欢
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多