gpt4 book ai didi

c# - 在不同线程上使用 Application.Run()

转载 作者:太空狗 更新时间:2023-10-29 22:35:20 27 4
gpt4 key购买 nike

请看下面的代码:

var splashForm = new SplashForm();
m_Thread = new Thread( () => System.Windows.Forms.Application.Run( splashForm ) )
m_Thread.Start();

// Do some initialization
// ...

// the following method just invokes `Close()` on the right thread
splashForm.Shutdown();

// Loop until the thread is no longer alive
// ...

System.Windows.Forms.Application.Run( mainForm );

看起来一切正常:首先我看到启动画面,然后主窗体启动。但不知何故,我遇到了奇怪的错误,例如:图形元素(无尽的 ProgressBar)没有正确显示。
编辑:我有两个进度条,一个在启动画面上,一个在主窗体上。它们在无尽模式下都表现出相同的(错误的)行为:没有进展,只有纯粹的背景。/EDIT
在我看来,这是由于在不同线程上调用了 Application.Run()。可以通过在启动启动画面之前调用 mainForm 的任何函数/属性来消除此错误 - 例如,

mainForm.Text = mainForm.Text;

任何人都可以确认此代码会导致问题 - 或者它应该表现正常并且我必须在其他地方寻找错误吗?
我已经在寻找闪屏实现,并且我知道它可以以不同的方式完成。但我有兴趣了解此实现及其可能出现的问题。谢谢!

最佳答案

显示 SplashForm 的线程需要有一个 Windows 消息泵,以便处理每个窗口/控件产生的消息。为此,您需要将该线程设为 STA 线程。尝试调用 SetApartmentState before 启动线程

关于c# - 在不同线程上使用 Application.Run(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1222820/

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