第一次猜測我會說你在你的班級裏對GUI進行了一些更新。由於在按鈕上一切正常,因此您的任務在GUI線程內運行,並且可以在沒有任何問題的情況下訪問所有內容。如果將任務外包給自己的線程,則無法直接訪問GUI。
要解決此問題,您可以將gui調用包裝爲(Begin)Invoke()
調用(有關這些命令差異的更深入的文章可以參見here)。爲了使它更容易一些,你也可以使用這些擴展方法之一:
public static class ControlExtensions
{
public static void InvokeIfRequired(this Control c, Action<Control> action)
{
if (c.InvokeRequired)
{
c.Invoke(new Action(() => action(c)));
}
else
{
action(c);
}
}
public static void BeginInvokeIfRequired(this Control c, Action<Control> action)
{
if (c.InvokeRequired)
{
c.BeginInvoke(new Action(() => action(c)));
}
else
{
action(c);
}
}
}
的用法是:
myTextBox.InvokeIfRequired((ctrl) => ctrl.Text == "SomeNewText");
我們需要您的代碼 – Nickolodeon 2011-01-11 09:38:24