我尝试改变一个文本框的颜色如上所述,我只是要显示代码,因为我认为这将是最合适的解释。
private async Task Disco()
{
int duration;
switch (ptr)
{
default:
//duration = 900;//15 min
duration = 10;
break;
case 1:
duration = 50;
//duration = 1800;//30 min
break;
}
int color = 0;
await Task.Run(() =>
{
while (duration-- != 0)
{
TB.ForeColor = foreground[color];
TB.BackColor = background[color];
if (++color == foreground.Length)
color = 0;
Thread.Sleep(1000);
}
});
TB.ForeColor = Color.Black;
}
前景色一直工作得很好,但当我添加了背景色线,它抛出
“System.Windows.Forms.dll中发生'System.InvalidOperationException'类型的异常,但未在用户代码中处理。线程间操作无效:从创建控件'TB'的线程以外的线程访问该控件。”
这怎么可能?
我真的访问它在上面的行与前景色,为什么是背景色的行为不同???
如果我把背景色线作为一个评论,一切又都好了...。
为文本框创建一个静态变量没有帮助。
我使用的是.net 3. 1(用于win 7),但这不应该是这里的问题。
1条答案
按热度按时间2eafrhcq1#
正如hijinxbassist和MySkullCaveIsADarkPlace所述,我在前台很幸运,不得不调用UI调用。