Vb.net 启动窗体关闭导致启动屏幕线程错误
我有一个我正在制作的桌面应用程序的启动屏幕。启动的工作方式是检查某些文件,如果发现它们,它会立即关闭并加载主窗体 但是,这样做会导致线程错误。我猜这是因为启动窗体在完全加载主窗体之前关闭 以下是错误消息: 跨线程操作无效:控件“frm_SplashScreen”是从创建它的线程以外的线程访问的 我尝试过让线程休眠,甚至使用计时器给表单加载时间。但到目前为止还没有成功Vb.net 启动窗体关闭导致启动屏幕线程错误,vb.net,splash-screen,Vb.net,Splash Screen,我有一个我正在制作的桌面应用程序的启动屏幕。启动的工作方式是检查某些文件,如果发现它们,它会立即关闭并加载主窗体 但是,这样做会导致线程错误。我猜这是因为启动窗体在完全加载主窗体之前关闭 以下是错误消息: 跨线程操作无效:控件“frm_SplashScreen”是从创建它的线程以外的线程访问的 我尝试过让线程休眠,甚至使用计时器给表单加载时间。但到目前为止还没有成功 Private Sub frm_Load_Load(sender As Object, e As EventArgs) Handl
Private Sub frm_Load_Load(sender As Object, e As EventArgs) Handles MyBase.Load
If Dir("System.dll") = "" then
Createfile()
Frm_Main.show()
Me.close()
Else
Frm_Main.show()
Me.close()
End IF
有关启动屏幕的所有其他内容都在应用程序下的项目属性中完成。否则它只是一个空表单
如何解决此问题?在WinForms中,启动屏幕不负责创建主窗体,也不应该这样做。如果在创建主窗体之前需要运行代码,且启动屏幕可见,请将该代码放入应用程序的
启动
事件中。以下是如何做到这一点:
Private Sub-MyApplication\u Startup(sender,e)处理我。Startup
)If Dir(…)然后Createfile()
内容)放入事件处理程序中如果启动代码确定您根本不希望显示主窗体,请在启动事件处理程序方法中设置
e.Cancel=true
,应用程序将退出,而不是显示主窗体。根据我以前的经验,这是visual studio中的一个错误,它是将启动窗体设置为窗口状态的结果。最大化
,覆盖默认启动事件。因此,为了解决这个问题,您需要启动来嘲笑启动,然后在启动屏幕的表单关闭事件上设置事件,而不是直接在启动表单中运行。在5个以上的项目上运行了。他们都有相同的问题,直到我将最大化状态移动到飞溅关闭事件,例如
Private sub splash_closed(....)
Startup form.window state.maximized...
End sub
因此,问题实际上是事件冲突。您是创建了自己的启动屏幕还是使用了Visual Studio提供的内置模板?这是WinForms吗?您是否在项目属性中设置了项目的启动窗体和启动屏幕,或者您正在以其他方式执行此操作?我创建了它,因此添加了一个新的windows窗体,并将其设计为类似于启动。然后在项目属性中,我将splash设置为该形式。但是,我尝试了该模板,它仍然会产生相同的错误。