跨线程操作无效:控制“statusStrip”从创建它的线程以外的线程访问

Kan*_*kit 1 c# multithreading winforms

我试过这个。 /sf/answers/9944861/

喜欢 toolStripStatusLabel1.InvokeRequired

toolStripStatusLabel1没有InvokeRequired

我也试过这个。 /sf/answers/1108190471/

它像无效参数一样出错

SetTextCallback d = new SetTextCallback(SetText); form.Invoke(d, new object[] { form, ctrl, text });

当我使用 ThreadHelperClass.SetText(this, toolStripStatusLabel1, "This text was set safely.");

但我使用时不会出错 textBox

我的代码有方法等待bool另一个使用线程在后台运行的方法。

Thread t = new Thread(TestRemoteDB);
t.Start();
// In TestRemoteDB() will call updateRemoteDBStatus()
Run Code Online (Sandbox Code Playgroud)

像这样

private void updateRemoteDBStatus(bool successful)
        {
            if (successful)
            {
                toolStripStatusLabel4.Text = "OK!";
                toolStripStatusLabel4.ForeColor = Color.Green;
            }
            else
            {
                toolStripStatusLabel4.Text = "Error!";
                toolStripStatusLabel4.ForeColor = Color.Red;
            }
        }
Run Code Online (Sandbox Code Playgroud)

Mar*_*čič 5

尝试这个:

this.BeginInvoke((Action)(() => toolStripStatusLabel1.Text = "This text was set safely."));
Run Code Online (Sandbox Code Playgroud)

  • 这是行不通的,因为 ToolStripStatusLabel 没有 BeginInvoke 方法。即使这样做也没有意义,因为 ThreadHelperClass 已经在使用 Invoke 在 UI 线程上执行代码。它不会编译,因为 ToolStripStatusLabel 不是控件,因此不能与 OP 链接的 ThreadHelperClass 一起使用。 (2认同)