C# 设置异步线程可以调用UI线程 SystemInvalidOperationException在创建窗口句柄之前不能在控件上调用 Invoke 或 BeginInvoke。
在 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 线程中执行更新操作。
需要注意的是,在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke 方法。因此,在调用这些方法之前,需要确保控件已经创建了窗口句柄。
原文地址: https://www.cveoy.top/t/topic/beHh 著作权归作者所有。请勿转载和采集!