关闭表单后获取ObjectDisposed异常

时间:2013-12-10 10:40:47

标签: vb.net

的MainForm:

Sub Button3Click(sender As Object, e As EventArgs)
        Form1.show()
        MsgBox("back")
    End Sub

这会在按钮上单击

打开一个新表单Form1

Form1中:

Public Partial Class Form1
    Public Sub New()
        ' The Me.InitializeComponent call is required for Windows Forms designer support.
        Me.InitializeComponent()
        Dim filePath As String
        filePath = System.IO.Path.Combine(MainForm.folderpath,"logininfo.cfg")
        Dim adptrname As String
        adptrname=MainForm.adptername.Trim
        MsgBox(adptrname.Length)
        Dim args As String

        args="netsh int ipv4 set address name=""" & adptrname & """ source=dhcp"
        Dim proc As New System.Diagnostics.Process()        
        proc.StartInfo.FileName = "netsh"
        proc.StartInfo.Verb="RunAs"
        proc.StartInfo.CreateNoWindow = true
        proc.StartInfo.RedirectStandardOutput = True
        proc.StartInfo.RedirectStandardError = True 
        proc.StartInfo.Arguments = args
        proc.StartInfo.UseShellExecute = False
        proc.Start()


        My.Computer.FileSystem.WriteAllText(MainForm.filePath, proc.StandardOutput.ReadToEnd(), True)
        My.Computer.FileSystem.WriteAllText(MainForm.filePath, proc.StandardError.ReadToEnd(), True)


        proc.WaitForExit()

        MsgBox(args)

        MsgBox(adptrname)
        Me.Close

    End Sub
End Class

在完成上述所有代码之后,我在mainform的Form1.show()行中得到了ObjectDisposed Exception,我无法理解在这里调用哪个被处置对象。

System.ObjectDisposedException: Cannot access a disposed object.
   at System.Windows.Forms.Control.CreateHandle()
   at System.Windows.Forms.Form.CreateHandle()
   at System.Windows.Forms.Control.get_Handle()
   at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
   at System.Windows.Forms.Form.SetVisibleCore(Boolean value)
   at System.Windows.Forms.Control.Show()
   at SIBMConnect.MainForm.Button3Click(Object sender, EventArgs e) in C:\Users\JONAH\Documents\SharpDevelop Projects\SIBMConnect\SIBMConnect\MainForm.vb:line 92
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.Run(ApplicationContext context)
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
   at SIBMConnect.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81

请帮忙

1 个答案:

答案 0 :(得分:1)

您在Close()(将调用Form1)的构造函数中调用Dispose,因此当您创建Form1的实例时,它已经是处于'处置'状态(您可以通过阅读IsDisposed属性来检查它。)

只是在构造函数中调用Close。实际上,除了初始化对象之外,不要在构造函数中做任何事情。

如果您根本不想展示它,为什么要使用Form