2014-12-07 111 views
0

我希望這是有人可以幫助我解決的問題。我正嘗試使用Windows窗體中的Cisco AnyConnect Built in工具運行DART Bundle。當我在一個點擊事件中使用Process.Start或System.Diagnostics.Process.Start調用exe時,它會複製該命令。然後我會同時運行兩次該進程。我可以使用Process.Start調用Cisco Connection GUI,而不會出現任何問題。代碼如下。還有一種方法可以延遲MsgBox(「寫入文件的文本」),直到DART捆綁包完成之後?process.start啓動兩次exe文件

Private Sub Button6_Click(sender As Object, e As RoutedEventArgs) Handles Button7.Click 
     System.Diagnostics.Process.Start("C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\dart\dartcli.exe") 
     MsgBox("Text written to file") 
     Button7.Background = System.Windows.Media.Brushes.Green 
    End Sub 

回答

0

所以我似乎已經發現爲什麼我有這個問題。當我創建按鈕時,單擊事件名稱時發生錯誤(意外複製名稱),並且我讓Visual Studio Express自動更正了這些問題。它在按鈕單擊事件的末尾添加了一個處理程序,導致按鈕將代碼調用兩次。我刪除了處理程序,並停止了兩次調用。

我從這個

Private Sub Button6_Click(sender As Object, e As RoutedEventArgs) Handles Button7.Click 
    System.Diagnostics.Process.Start("C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\dart\dartcli.exe") 
    MsgBox("Text written to file") 
    Button7.Background = System.Windows.Media.Brushes.Green 
End Sub 

爲了這個去了。解決問題

​​

感謝大家的時間和幫助!

1

可能是程序啓動不會被調用兩次,而是事件觸發兩次。 放置一個斷點並檢查它。 如果是,那麼你可以很容易地找到調用堆棧中的問題。

而且,是的,您可以延遲郵件。 據我所知,這個DART Bundle執行,輸出數據到文件並退出。

因此,您可以使用下面的代碼來解決問題。它使用C#,但在VB.NET中應該是相同或相似的。

Process.Start("C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\dart\dartcli.exe"); 
Process.WaitForExit(); 
MessageBox.Show("Text written to file."); 

WaitForExit()將同步等待,直到過程結束。 或者,如果您不希望應用程序被阻止,則可以訂閱Process.Exited事件。

private void YourMethod() 
{ 
    Process process = new Process(); 
    process.StartInfo.FileName = "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\dart\dartcli.exe"; 
    process.Exited += new EventHandler(Process_Exited); 
    process.Start(); 
} 

private void Process_Exited(object sender, EventArgs e) 
{   
    MessageBox.Show("Text written to file"); 
} 
+0

我把一個斷點,我看到它在按鈕顏色更改後再次啓動按鈕事件。休息將停止在'Button7.Background.System.Windows.Media.Brushes.Green',然後當我點擊繼續時,它再次啓動dartcli.exe。我如何找到調用堆棧來糾正這個問題?請原諒我無知我是VB編程新手。謝謝 – LordDaius 2014-12-08 22:02:01

+0

我實際上只是試圖以這種方式重寫命令'Dim dart As System.Diagnostics.Process = System.Diagnostics.Process.Start(「C:\ Program Files(x86)\ Cisco \ Cisco AnyConnect安全移動客戶端\ dart \ dartcli.exe「) dart.WaitForExit()'但它仍然啓動兩次事件。它也再次調用整個表單。所以現在我已經在屏幕上運行了兩次,兩次。 – LordDaius 2014-12-08 22:25:42

+0

@LordDaius您可以上傳完整的.cs和.designer.cs文件。你可以使用pastebin.com來做到這一點。 – 2014-12-09 03:24:21