2013-12-10 51 views
2

的MainForm之後ObjectDisposed以外的所有上面的代碼運行入門關閉形式

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 

後,我得到了ObjectDisposed在mainform中的Form1.show()行異常我無法理解哪個處置對象被調用在這裏。

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 

請幫

+0

爲什麼這個標記的VBA? – 2013-12-10 10:45:27

+0

你不應該寫Form1.show()這樣的代碼。使用'New Form1()。Show()' –

+0

你在哪一行得到異常?這個例外的完整細節應該使這個非常清晰...... –

回答

1

您在Form1構造函數(它將調用Dispose)調用Close(),所以當你創建的Form1一個實例,這將已經在「配置」狀態(你可以通過閱讀IsDisposed屬性來檢查它)。

只是不要在構造函數中調用Close。事實上,除了初始化對象之外,不要在構造函數中做任何事情。

如果你不想展示它,你爲什麼要用Form

+0

做這樣的事情有完全有效的理由。例如,您可能會重載構造函數以獲取發送給main的命令行參數,並且導致應用程序需要終止的錯誤。 – Aelphaeis