2010-11-09 154 views
3

嗨,我需要暫停/等待arorasTEMP.bat和「Label2.Text =」附加AutoCAD版本A ...「之間的波紋管VB程序,因爲它偏偏是由它的臨時副本之前暫停/等待* .bat完成VB.net

Dim RetBat1 

    RetBat1 = Shell("C:\VTS\arorasTEMP.bat", 1) 

    Label2.Text = "Appending for AutoCAD version A..." 

    'Appending the acad2011.lsp 
    If System.IO.File.Exists(FILE_NAME1) = True Then 
     Dim objWriter As New System.IO.StreamWriter(FILE_NAME1, True) 
     objWriter.WriteLine(arorasKEY) 
     objWriter.Close() 

    End If 

誰能給例如蝙蝠被追加

回答

1

你可以告訴shell等待過程中執行其他任何操作之前完成:

RetBat1 = Shell("C:\VTS\arorasTEMP.bat", ,True) 

甚至給一個提姆EOUT如果時間過長,在此盒6秒停止執行:

RetBat1 = Shell("C:\VTS\arorasTEMP.bat", , True, 6000) 

更多有關Shell功能信息:http://msdn.microsoft.com/en-us/library/xe736fyk(VS.80).aspx

+0

但是我想讓shell運行並且VB.net等待直到shell完成(我想它只是相反方向) – william 2010-11-09 14:21:04

+0

這將使VB-net等待進程在繼續執行之前完成。 – Stefan 2010-11-09 14:23:23

+0

更正我應該首先測試它,你是更正確的Stefan它只是看着即時通訊讓蝙蝠等待,但這顯然不是現在證明的情況。我的錯誤非常感謝 – william 2010-11-09 14:31:35

4

Shell是一個VB6的命令,它不發動過程的理想方式。

在.NET的正確方法來調用一個過程,等待它的是:

Dim aroras as Process = Process.Start("C:\VTS\arorasTEMP.bat") 
aroras.WaitForExit() 
' error code is available in aroras.ExitCode, if you need it 

您也可以強行如果時間太長殺它:

If Not aroras.WaitForExit(300) Then 
    aroras.Kill() 
End If 

(其中300等待的時間以毫秒爲單位)

+0

命名空間是Microsoft.VisualBasic,而不是Microsoft.VisualBasic.Compatibility。所以使用它沒有問題。 Microsoft.VisualBasic命名空間絕對是100%真實的.Net,完全支持,並且只要.Net就在其周圍。看到這個問題的答案:http://stackoverflow.com/questions/226517/is-the-microsoft-visualbasic-namespace-true-net-code – Stefan 2010-11-09 14:32:37

+0

這就是說,我仍然會使用process.start方法,它提供了很多更多的選擇。 – Stefan 2010-11-09 14:34:19