Cách sử dụng Process.Start trong Visual Basic

0
19


Phương thức Start của đối tượngQuy trình có thể là một trong những công cụ được đánh giá thấp nhất dành cho lập trình viên. Như một . NET , Start có một số tình trạng quá tải, là các bộ tham số khác nhau xác định chính xác chức năng của phương thức. Quá tải cho phép bạn chỉ định hầu hết mọi bộ tham số mà bạn muốn chuyển sang quy trình khác khi nó bắt đầu.

Những gì bạn có thể làm với Process.Start thực sự chỉ bị giới hạn bởi các quy trình bạn có thể sử dụng với nó. Nếu bạn muốn hiển thị readme dựa trên văn bản của mình trong Notepad, thật dễ dàng như sau:

Process.Start("Readme.txt")
Process.Start("notepad", "ReadMe.txt")

Ví dụ này giả định rằng tệp readme nằm trong cùng thư mục với chương trình và Notepad là ứng dụng mặc định cho các loại tệp .txt và nằm trong đường dẫn môi trường hệ thống.

Process.Start tương tự lệnh shell trong VB6

Đối với các lập trình viên quen thuộc với Visual Basic 6, Process.Start giống như lệnh VB 6 Shell . Trong VB 6, bạn sẽ sử dụng một cái gì đó như:

lngPID = Shell("MyTextFile.txt", vbNormalFocus)

Sử dụng Process.Start

Bạn có thể sử dụng mã này để bắt đầu tối đa hóa Notepad và tạo một đối tượng ProcessStartInfo mà bạn có thể sử dụng để kiểm soát tốt hơn:

Làm mờ ProcessProperties dưới dạng mới ProcessStartInfo 
ProcessProperties.FileName = "notepad"
ProcessProperties.Arguments = "myTextFile.txt"
ProcessProperties.WindowStyle = ProcessWindowStyle.Maximized
Làm mờ myProcess As Process = Process.Start(ProcessProperties)

Bắt đầu một quá trình ẩn

Bạn thậm chí có thể bắt đầu một quá trình ẩn.

ProcessProperties.WindowStyle = ProcessWindowStyle.Hidden

Truy xuất tên của một quá trình

Làm việc với Process.Start như một đối tượng .NET cung cấp cho bạn nhiều khả năng. Ví dụ: bạn có thể truy xuất tên của quy trình đã được bắt đầu. Mã này sẽ hiển thị “notepad” trong cửa sổ đầu ra:

Dim myProcess As Process = Process.Start("MyTextFile.txt") Console.WriteLine(myProcess.ProcessName)

Đây là điều bạn không thể thực hiện với lệnh VB6  Shell vì nó khởi chạy ứng dụng mới một cách không đồng bộ. Sử dụng  WaitForExit  có thể gây ra sự cố đảo ngược trong .NET vì bạn phải bắt đầu một quy trình trên một luồng mới nếu bạn cần nó chạy không đồng bộ. Ví dụ: nếu bạn cần các thành phần tồn tại trên một biểu mẫu nơi quy trình được bắt đầu và  WaitForExit

Một cách để buộc quá trình dừng lại là sử dụng phương thức Kill .

myProcess.Kill()

Mã này đợi mười giây rồi kết thúc quá trình.

Tuy nhiên, đôi khi một sự chậm trễ bắt buộc là cần thiết để cho phép quá trình hoàn thành đầu ra để tránh lỗi.

myProcess.WaitForExit(10000) 
' nếu quá trình không hoàn tất trong
vòng ' 10 giây,
hủy nó Nếu không phải myProcess.HasExited Sau đó
myProcess.Kill()
Kết thúc Nếu
Threading.Thread.Sleep(1)
Console.WriteLine("Notepad đã kết thúc: " _
& myProcess.ExitTime & _
Môi trường.NewLine & _
"Mã Thoát: " & _
myProcess.ExitCode)

Trong hầu hết các trường hợp, có lẽ nên đặt quá trình xử lý của bạn vào một   khối sử dụng để đảm bảo rằng các tài nguyên mà quá trình sử dụng được giải phóng.

Sử dụng myProcess As Process = New Process 
' Mã của bạn ở đây
Kết thúc Sử dụng

Để làm cho tất cả những điều này trở nên dễ dàng hơn, thậm chí còn có một thành phần điện toán  mà bạn có thể thêm vào dự án của mình để bạn có thể thực hiện nhiều việc được trình bày ở trên tại thời điểm thiết kế thay vì thời gian chạy.

Một trong những điều khiến điều này trở nên dễ dàng hơn rất nhiều là việc mã hóa các sự kiện do quy trình tạo ra, chẳng hạn như sự kiện khi quy trình kết thúc. Bạn cũng có thể thêm bộ điều khiển bằng mã như sau:

' Cho phép quy trình tăng sự kiện 
myProcess.EnableRaisingEvents = True
' Thêm
trình xử lý sự kiện đã thoát AddHandler myProcess.Exited, _
AddressOf Me.ProcessExited
Private Sub ProcessExited(ByVal sender As Object, _
ByVal e As System.EventArgs)
' Mã của bạn ở đây
kết thúc phụ

Nhưng chỉ cần chọn sự kiện cho thành phần thì dễ dàng hơn nhiều.