这个异常通常是因为在一个线程中访问了另一个线程创建的控件,造成线程间操作无效。以下是解决这个问题的几种方法:

  1. 使用委托和Invoke方法,将访问控件的代码放在创建控件的线程上执行。代码示例:
private void UpdateTextBox(string text)
{
    if (textBox1.InvokeRequired)
    {
        textBox1.Invoke(new MethodInvoker(() => UpdateTextBox(text)));
        return;
    }
    textBox1.Text = text;
}
  1. 使用BackgroundWorker或Task等多线程编程方法,在后台线程中执行耗时操作,避免在UI线程中进行操作。代码示例:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    // 耗时操作
    e.Result = '更新后的文本';
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Error != null)
    {
        // 处理异常
        return;
    }
    UpdateTextBox((string)e.Result);
}
  1. 使用SynchronizationContext对象,在UI线程中执行后台线程的回调操作。代码示例:
private SynchronizationContext uiContext;

private void Form1_Load(object sender, EventArgs e)
{
    uiContext = SynchronizationContext.Current;
}

private void UpdateTextBox(string text)
{
    uiContext.Post(state => textBox1.Text = text, null);
}

以上是常见的解决方法,需要根据具体情况选择合适的方法。

C# WinForm 异常: System.InvalidOperationException'线程间操作无效' 解决方法

原文地址: https://www.cveoy.top/t/topic/mFCG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录