【问题标题】:Thread method skipping 'if' statement [closed]线程方法跳过'if'语句[关闭]
【发布时间】:2015-12-14 14:17:24
【问题描述】:

当我尝试在创建的线程中使用我的方法时,线程会在循环中跳过“if”语句。问题是 label4 总是显示其他状态。我应该怎么做才能正确操作?这是我的代码;

这是我创建线程的地方;

for(int i = 0; i <threads; i++)
{
    var tempThread = new Thread(new ThreadStart(DoWork));
    tempThread.Name = i.ToString();
    tempThread.Start();
}
CheckForIllegalCrossThreadCalls = false;

这就是我的线程方法所做的;

public void DoWork()
{
    for(int i=2; i < variable/ 2; i++)
    {
        if (variable% i == 0) label4.Text ="yes not";
        else label4.Text = "yes";
    }
}

【问题讨论】:

  • CheckForIllegalCrossThreadCalls = false 看起来像你作弊,而不是理解问题并以正确的方式解决它。这会咬你的。
  • 变量是“整数”。我正在理解线程逻辑,但这一个是针对我的项目的,我没有时间以正确的方式去做。但是项目结束后,我当然会明白其中的逻辑,下次我不会作弊:)
  • 在后台线程中更新标签不起作用。你调试过这段代码吗?还是您没有显示其中的某些部分?
  • @YuvalItzchakov 这不是全部代码,但问题出在这些部分。当我调试所有代码时没有问题,但标签不显示正确的文本。
  • “没有问题,但标签没有显示正确的文字”这听起来很矛盾。

标签: c# multithreading loops


【解决方案1】:

我猜这就是你想要做的,但由于你没有告诉我们你的目标,我们只能猜测

public void DoWork()
{
    for(int i=2; i < variable/ 2; i++)
    {
        if (variable% i == 0) {
            label4.Text ="yes not";
            return;
        }
    }
    label4.Text = "yes";
}

我不使用 C#,但如果 DoWork 是您创建线程的方式,那么我认为这对于几乎不需要时间就可以完成的事情来说有点多。

【讨论】:

  • 这正是我需要的,非常感谢我的朋友。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多