winforms 可以更改异步任务中文本框的前景色,但不能更改背景色

eivgtgni  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(147)

我尝试改变一个文本框的颜色如上所述,我只是要显示代码,因为我认为这将是最合适的解释。

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),但这不应该是这里的问题。

2eafrhcq

2eafrhcq1#

正如hijinxbassist和MySkullCaveIsADarkPlace所述,我在前台很幸运,不得不调用UI调用。

相关问题