gpt4 book ai didi

VB.net ApplicationFramework 加上 SplashScreen : InvalidOperationException

转载 作者:行者123 更新时间:2023-12-03 04:16:14 25 4
gpt4 key购买 nike

我最近将我的应用程序从使用自定义 SplashScreen(它只是一个带有计时器的表单加载主表单并自行关闭)更改为应用程序框架。

这是我所做的:

  • 创建了一个新的 SplashScreenForm,用于显示应用版本等。
  • 在以下位置选择该表单:我的项目 -> 应用程序 -> SplashScreen
  • 将长时间运行的初始化代码从主窗体的构造函数移至 ApplicationEvents 启动事件

这完全符合我的要求。 SplashScreen 首先出现,然后启动事件触发并开始工作。 SplashScreen 关闭并显示实际的主窗体。

到目前为止一切顺利。但我们的客户有时会在启动过程中遇到这种令人讨厌的异常:

System.InvalidOperationException: Invoke oder BeginInvoke kann für ein Steuerelement erst aufgerufen werden, wenn das Fensterhandle erstellt wurde.
bei System.Windows.Forms.Control.WaitForWaitHandle(WaitHandle waitHandle)
bei System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
bei System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
bei System.Windows.Forms.Control.Invoke(Delegate method)
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.HideSplashScreen()
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.MainFormLoadingDone(Object sender, EventArgs e)
bei System.EventHandler.Invoke(Object sender, EventArgs e)
bei System.Windows.Forms.Form.OnLoad(EventArgs e)
bei System.Windows.Forms.Form.OnCreateControl()
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl()
bei System.Windows.Forms.Control.WmShowWindow(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
bei System.Windows.Forms.Form.WmShowWindow(Message& m)
bei System.Windows.Forms.Form.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

在 HideSplashScreen() 期间似乎出现错误,但问题是整个堆栈超出了我的控制范围,因此我无法捕获此异常。

有什么建议吗?

最佳答案

将其放入您的启动画面中。如果有一些组件,该子组件可能已在 Designer.vb 文件中声明。只需将其内容移至源代码并插入第一行即可。

Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then My.Application.SplashScreen = Nothing
MyBase.Dispose(disposing)
End Sub

我已经进行了深入分析,包括框架程序集的反编译,这应该可以解决问题。详细的解释会更长。

我无法在自己的计算机上重现此问题,但在各种客户端计算机上都会出现错误。即使是恶意调用,似乎也无法重现。没有硬件或软件相关的条件来模拟该问题,但当事件循环消息延迟并且工作线程在错误的时刻切换时,它通常发生在 CPU 使用率低或高的 PC 上。

关于VB.net ApplicationFramework 加上 SplashScreen : InvalidOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4544604/

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