gpt4 book ai didi

c# 从另一个线程而不是 UI 线程调用 backgroundWorker

转载 作者:太空狗 更新时间:2023-10-30 01:10:33 25 4
gpt4 key购买 nike

我正在尝试加载 loadingForm 如下代码。但它不起作用,loadingForm 没有消失,事件 RunWorkerCompleted 没有被调用。

而且,我需要多次调用loadingFormbackgroundWorker,那么如何完全处理loadingForm backgroundWorker 每次通话后?

我认为我的代码中有很多错误,但我不知道如何修复。你能告诉我如何解决我的问题并指出我需要修复的地方吗?非常感谢。

public partial class loginForm : Form
{
//....
private loadingForm lf;
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
lf.Show();
While (backgroundWorker1.isBusy)
Application.DoEvents();
}
private void backgroundWorker1_RunWorkerCompleted(object sender, DoWorkEventArgs e)
{
lf.Close();
}
private void connect()
{
//....
Thread mainThread = new Thread(ThreadStart(listentoServer));
mainThread.Start();
}
private void listentoServer()
{
//....
lf = new loadingForm();
backgroundWorker1.RunWorkerAsync();
//....
backgroundWorker1.CancelAsync();
//....
}
}

最佳答案

您的代码有很多问题。如果可以,试着退后一步,描述一下你到底想做什么。

BackgroundWorker 使用基于事件的异步模式 (EAP)。因此,它需要一个线程上下文来生存。 UI 线程满足此要求,但手动创建的 Thread 实例不满足(除非您安装一个或将实例设为辅助 UI 线程)。

类似地,UI 组件绑定(bind)到特定的线程。它们需要一个执行消息泵送的 STA 线程(例如,Application.DoEvents)。

在我看来,您正在创建一个手动Thread,然后从该线程创建 UI 组件(因此您知道该线程应该是 STA 并且包括一个消息泵循环,它们都不在您的代码中)。然后该线程启动一个 BGW,它执行消息泵送。

不清楚您要在这里完成什么 - 也许在单独的线程中显示对话框?

据我所知,WinForms 应用程序中的多个 UI 线程不是官方支持的场景,尽管有些人已经让它工作了。不过,我从未见过需要它。

关于c# 从另一个线程而不是 UI 线程调用 backgroundWorker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4513198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com