![]() |
1
2
是的,您正在与SystemEvents类发生冲突。该类创建一个侦听系统事件的隐藏窗口。特别是UserPreferenceChanged事件,许多控件使用该事件来知道何时需要重新绘制自己,因为系统颜色已更改。 问题是,创建窗口的初始化代码对调用它的线程的单元状态非常敏感。在您的例子中,这是错误的,您没有调用Thread.SetApartmentState()来切换到STA。那是 非常 请注意,您的解决方案实际上并不是修复程序,系统事件将在错误的线程上引发。你的splash线程而不是你程序的UI线程。当一个实际的系统事件被触发时,您仍然会得到随机的和非常难以诊断的故障。最臭名昭著的是,当用户锁定工作站时,程序会在再次解锁时死锁。 我认为调用Thread.SetApartmentState()应该可以解决您的问题。不是100%确定,这些UI线程交互很难分析,我还没有搞错。请注意,.NET已经有很多 solid support 用于启动屏幕。这样的细节肯定是对的。 |
![]() |
2
1
我能够模拟你的问题,我可以提供一个解决办法,但可能有一个更好的选择,因为这是我第一次遇到这个。 避免异常的一个方法是不关闭启动屏幕,而只是隐藏它。像这样的
然后,让线程在后台线程上运行启动屏幕非常重要,以确保启动屏幕线程不会使应用程序保持活动状态。所以你的代码看起来像这样
|
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |