我有一个普通的Windows Forms
应用,但收到以下错误:
Invoke or begininvoke cannot be called on a control which is not yet created.
这在以下代码中发生:
Application.ThreadException += Application_ThreadException;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var args = new string[0];
new MyApp().Run(args);
我正在使用启动画面,我认为这是问题开始的地方。
这是如何解决的?
答案 0 :(得分:1)
为什么要将参数传递给自己的应用程序? Windows Forms
应用程序的默认入口点定义不接受任何参数,因此您是否手动更改了此参数?
解决似乎是你的问题,但请尝试使用它:
Application.Run(new YourMainForm());
所以,最终:
Application.ThreadException += Application_ThreadException;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new YourMainForm());
为了检索执行者传递给应用程序的参数,您可以使用公开Environment
方法的GetCommandLineArgs
类。所以你需要确定这些值吗?A)调用这个方法,解析然后通过属性或类似的东西以强类型格式存储,或者,B)调用这个方法,按需解析,比如,从内部你的表格。
答案 1 :(得分:0)
我刚刚发布的一篇旧帖子 - 看来有一个MS漏洞突然出现,几乎是随机的,尽管有些机器似乎比其他机器更受影响。
感谢Mr Gallagher将我指向MSDN social article并进行了解决。
诀窍是帮助框架实现启动屏幕实际可用时,不要让它隐藏起泡直到它被正确创建。
因此,请添加SplashLoadFinished
标记作为用户设置或类似标记。
然后在Splash Form.Load
事件中设置此标志(下面的行必须分别是第一行和最后一行):
Private Sub Form_Load(sender As Object, e As System.EventArgs) Handles Me.Load
My.Settings.SplashLoadFinished = False
...
My.Settings.SplashLoadFinished = True
End Sub
然后在ApplicationEvents
Startup
事件中放置一个等待循环:
Private Sub MyApplication_Startup(sender As Object, e As ApplicationServices.StartupEventArgs) Handles Me.Startup
...
If (Me.SplashScreen IsNot Nothing) Then
'Wait until the Splash has actually been created
While (Not My.Settings.SplashLoadFinished)
System.Threading.Thread.Sleep(50)
End While
End If
...