PictureBox没有更新

时间:2014-12-22 11:05:01

标签: c# winforms picturebox

这似乎是一个非常常见的问题,但很多解决方案都有其他背景,所以我只是寻找原始解决方案。

我有一个想要更新的图片框,而有些东西正在后台发生,使用图片框来指示状态。因此,在处理东西的代码中,我有一些读起来像这样的行

form.changeStatusBox(1);

然后再回到一个看起来像这样的方法:

    public void changeStatusBox(int status)
    {
        switch (status)
        {
            case 0:
                picBox.Image = project.Properties.Resources.gray;
                break;
            case 1:
                picBox.Image = project.Properties.Resources.green;
                break;
            case 2:
                picBox.Image = project.Properties.Resources.yellow;
                break;
            case 3:
                picBox.Image = project.Properties.Resources.red;
                break;
        }
    }

现在,当我运行代码时,这不会更新图片框。我已经看到了各种建议,说你必须创建一个委托,或者创建一个新的线程,或者只是使用picBox.Invalidate()(我试过没试过)。我真的不知道该怎么做才能完成这项工作或被认为是正确的。我几乎可以肯定,正确的答案是将这个概念(Form Not Responding when any other operation performed in C#)应用于问题,但我迷失了它并且不确定如何。我很想看到一个例子!谢谢!

E:作为参考,这就是另一端发生的事情。这是旧代码,我没有源代码,所以虽然它并不复杂,但这是一个反编译的混乱:

public string createHash()
{
  main form = new main();

  try
  {
    string[] strArray = Enumerable.ToArray<string>(Enumerable.Select<char, string>((IEnumerable<char>) string.Format("{0:ddMMyyhhmmssffff}", (object) SimpleNTP.GetNetworkTime()), (Func<char, string>) (c => c.ToString())));
    string[] input = new string[8];

    form.changeStatusBox(2);

    for (int index = 0; index < 8; ++index)
    {
      string str = strArray[index] + strArray[15 - index];
      input[index] = str;
    }
    this.finalhash = this.createHash(input);
  }
  catch (Exception ex)
  {
    Console.WriteLine(((object) ex).ToString());
    form.changeStatusBox(3);
  }
  form.changeStatusBox(1);
  return this.finalhash;
}

0 个答案:

没有答案