在 C# 中,可以使用委托和异步编程模型(APM)来实现在异步线程中调用 UI 线程。

以下是一个示例代码:

private void button1_Click(object sender, EventArgs e)
{
    // 创建一个异步线程
    Thread thread = new Thread(new ThreadStart(DoWork));
    thread.Start();
}

private delegate void UpdateUIDelegate(string text);

private void UpdateUI(string text)
{
    // 在 UI 线程中更新控件
    if (this.InvokeRequired)
    {
        this.Invoke(new UpdateUIDelegate(UpdateUI), text);
    }
    else
    {
        label1.Text = text;
    }
}

private void DoWork()
{
    // 模拟耗时操作
    Thread.Sleep(5000);

    // 在异步线程中调用 UI 线程
    UpdateUI("Done!");
}

在上面的示例中,我们首先创建了一个异步线程并调用了 DoWork 方法。在 DoWork 方法中,我们模拟了一个耗时操作,然后通过 UpdateUI 方法在异步线程中调用了 UI 线程。

UpdateUI 方法中使用了 Invoke 方法来确保在 UI 线程中更新控件。如果当前线程不是 UI 线程,则使用委托来在 UI 线程中执行更新操作。

需要注意的是,在创建窗口句柄之前,不能在控件上调用 InvokeBeginInvoke 方法。因此,在调用这些方法之前,需要确保控件已经创建了窗口句柄。

C# 设置异步线程可以调用UI线程 SystemInvalidOperationException在创建窗口句柄之前不能在控件上调用 Invoke 或 BeginInvoke。

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

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