这似乎是一个非常常见的问题,但很多解决方案都有其他背景,所以我只是寻找原始解决方案。
我有一个想要更新的图片框,而有些东西正在后台发生,使用图片框来指示状态。因此,在处理东西的代码中,我有一些读起来像这样的行
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;
}