我目前正在尝试使用带有图形用户界面的 QuickFix 创建一个简单的客户端(启动器)。我正在使用 Visual Studio 2012 并在 VB.Net 中进行编程。
这是我的问题:当我启动应用程序时,出现此错误:“WindowsApplication1.exe 中发生了类型为‘System.InvalidOperationException’的未处理异常
附加信息:创建表单时出错。有关详细信息,请参阅 Exception.InnerException。错误是:表单在构造过程中从默认实例引用自身,这导致无限递归。在表单的构造函数中,使用“Me”引用表单。”
我的项目中有两个文件,分别是 Client GUI.vb ( http://pastebin.com/virgVNyS ) 和 MyQuickFixApp.vb ( http://pastebin.com/tQ1GXNSx )。第二个包含将 IApplication 与所有子组件集成的类。
当它从 Client GUI.vb 执行以下行:“Dim initiator As New SocketInitiator(myApp, storeFactory, settings, logFactory)”时,会发生错误,但软件会突出显示文件 Application.Designer.vb 中的一行:
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.WindowsApplication1.ClientGUI
End Sub
Run Code Online (Sandbox Code Playgroud)
你能帮助我并告诉我出了什么问题吗?
非常感谢 !
Dim filename As String = "initiator.cfg"在处理 WinForms 时,避免问题的最佳做法是在 GUI 构建/加载(在方法上)之后初始化所有内容(除了简单的变量分配,例如:很好) _Load。您收到此错误的原因是因为Me.MainForm =在实际创建主表单 ( ) 之前引用了它。
移动Dim initiator As New SocketInitiator(myApp, storeFactory, settings, logFactory)到ClientGUI_Load(Load Event主窗体的方法),错误就会消失。
注意:如果你想initiator从“任何地方”访问,你应该保留全局声明,但将赋值移到 Load 事件,即:
Dim initiator As SocketInitiator 'at the Class level, outside any sub/function (as previously)
Run Code Online (Sandbox Code Playgroud)
和
initiator = New SocketInitiator(myApp, storeFactory, settings, logFactory) 'Inside the ClientGUI_Load method.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5781 次 |
| 最近记录: |