Làm th? nào đ? s? d?ng Visual Basic.NET ho?c Visual Basic 2005 đ? đóng m?t ?ng d?ng khác

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 305602 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Bài vi?t này mô t? cách đ? đóng m?t ?ng d?ng t? trong ?ng d?ng. Nó c?ng mô t? làm th? nào đ? đóng m?t trư?ng h?p c? th? c?a m?t ?ng d?ng khác, ch?ng h?n như Notepad, n?u nhi?u hơn m?t ví d? c?a các ?ng d?ng đang ch?y.

Th?o lu?n v? l?p tr?nh Logic

Khai báo các bi?n

Nhi?u bi?n c?n ph?i đư?c đ?nh ngh?a. B?i v? các bi?n này là đư?c s? d?ng trong nhi?u phương pháp, h? nên đư?c đ?nh ngh?a bên ngoài c?a b?t k? th? t?c như v?y r?ng h? v?n c?n trong ph?m vi. Các proc bi?n gi? m?t tham chi?u đ?n m?t đ?i tư?ng quá tr?nh cá nhân, và quy tr?nh là m?t m?ng ch?a các đ?i tư?ng quá tr?nh đó đư?c tr? v? b?i các GetProcessByName phương pháp:
Private proc As Process
Private processes() As Process
Private procName As String = "notepad"
				

Có đư?c m?t danh sách các trư?ng h?p ?ng d?ng

Đo?n m? sau này bao g?m m?t ch?c năng (đư?c g?i là buildList trong m?u) mà đư?c g?i là m?i th?i gian m?t trư?ng h?p m?i c?a Notepad đư?c t?o ra. M?u này lưu các x? l? thông tin trong m?t ListView ki?m soát; m? đ? cư trú các ListView đi?u khi?n đư?c bao g?m ch? cho nh?t quán v?i hoàn toàn m?u. Các ph?n quan tr?ng nh?t c?a m? này là các cu?c g?i đ?n các GetProcessByName phương pháp c?a các Quá tr?nh l?p h?c. Phương pháp này tr? v? m?t m?ng c?a Quá tr?nh các đ?i tư?ng, mà có th? đư?c iterated hơn b?ng cách s? d?ng m?t Cho...M?i ch?n, như sau:
Dim itemAdd As ListViewItem
ListView1.Items.Clear()

processes = Process.GetProcessesByName(procName)

For Each proc In processes
    itemAdd = ListView1.Items.Add(proc.MainWindowTitle)
    itemAdd.SubItems.Add(proc.Id.ToString)
Next
				

Đóng m?t trư?ng h?p c? th? c?a m?t ?ng d?ng

Khi nhi?u trư?ng h?p c?a m?t ?ng d?ng đang ch?y, và b?n mu?n đóng m?t ví d?, b?n ph?i phân bi?t gi?a nh?ng quy tr?nh. Các sau m?u s? d?ng các ID tài s?n c?a các Quá tr?nh đ?i tư?ng cho bi?t các quá tr?nh ngoài. Các ID b?t đ?ng s?n và các MainWindowTitle b?t đ?ng s?n (b?t đ?ng s?n khác c?a các Quá tr?nh đ?i tư?ng) đư?c lưu tr? trong các ListView ki?m soát. M? l?y đư?c kho?n m?c hi?n đang đư?c ch?n trong các ListView ki?m soát, l?y đư?c m?t tham chi?u đ?n quá tr?nh b?ng cách s? d?ng các GetProcessById phương pháp c?a các Quá tr?nh l?p h?c, và đóng c?a quá tr?nh b?ng cách g?i các CloseMainWindow phương pháp, như sau:
Try
    Dim procID As Integer = _  
     System.Convert.ToInt32(ListView1.SelectedItems(0).SubItems(1).Text)
    Dim tempProc As Process = Process.GetProcessById(procID)
    tempProc.CloseMainWindow()
    tempProc.WaitForExit()
    buildList()
Catch
    MessageBox.Show("Please select a process in the ListView before clicking this button." + _
      " Or the Process may have been closed by somebody.")
    buildList()
End Try
				

Đóng t?t c? trư?ng h?p c?a m?t ?ng d?ng

Đóng t?t c? các trư?ng h?p c?a m?t ?ng d?ng c? th? là tương đ?i đơn gi?n. B?n có th? đi b? xe đư?c tr? v? b?i các GetProcessByName phương pháp và các cu?c g?i các CloseMainWindow phương pháp trên m?i quá tr?nh đ?i tư?ng, như sau:
Try
  For Each proc In processes
    proc.CloseMainWindow()
    proc.WaitForExit()
  Next
  buildList()
Catch ex As System.NullReferenceException
  MessageBox.Show("No instances of Notepad running.")      
End Try
				

Các bư?c đ? xây d?ng các m?u

  1. B?t đ?u m?t ?ng d?ng Visual Basic Windows m?i trong Visual Ph?ng thu.NET hay trong Visual Studio 2005.
  2. Nh?p chu?t ph?i vào h?nh th?c m?c đ?nh, Form1.vb, và ch?n Xem m?.
  3. Thay th? m? trong c?a s? m? v?i các sau:
    Option Strict On
    Option Explicit On 
    
    Public Class Form1
      Inherits System.Windows.Forms.Form
    
    #Region " Windows Form Designer generated code "
    
      Public Sub New()
        MyBase.New()
    
        'This call is required by the Windows Form Designer.
        InitializeComponent()
    
        'Add any initialization after the InitializeComponent() call.
    
      End Sub
    
      'Form overrides dispose to clean up the component list.
      Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
          If Not (components Is Nothing) Then
            components.Dispose()
          End If
        End If
        MyBase.Dispose(disposing)
      End Sub
      Friend WithEvents btnLaunch1 As System.Windows.Forms.Button
      Friend WithEvents ColumnHeader1 As System.Windows.Forms.ColumnHeader
      Friend WithEvents ColumnHeader2 As System.Windows.Forms.ColumnHeader
      Friend WithEvents ListView1 As System.Windows.Forms.ListView
      Friend WithEvents btnCloseAll As System.Windows.Forms.Button
      Friend WithEvents btnClose1 As System.Windows.Forms.Button
    
      'Required by the Windows Form Designer.
      Private components As System.ComponentModel.Container
    
      'NOTE: The following procedure is required by the Windows Form Designer
      'It can be modified by using the Windows Form Designer.  
      'Do not modify it by using the code editor.
      <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.btnClose1 = New System.Windows.Forms.Button()
        Me.ListView1 = New System.Windows.Forms.ListView()
        Me.ColumnHeader1 = New System.Windows.Forms.ColumnHeader()
        Me.ColumnHeader2 = New System.Windows.Forms.ColumnHeader()
        Me.btnCloseAll = New System.Windows.Forms.Button()
        Me.btnLaunch1 = New System.Windows.Forms.Button()
        Me.SuspendLayout()
        '
        'btnClose1
        '
        Me.btnClose1.Location = New System.Drawing.Point(160, 176)
        Me.btnClose1.Name = "btnClose1"
        Me.btnClose1.Size = New System.Drawing.Size(112, 32)
        Me.btnClose1.TabIndex = 4
        Me.btnClose1.Text = "Close Selected Process"
        '
        'ListView1
        '
        Me.ListView1.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2})
        Me.ListView1.Location = New System.Drawing.Point(22, 8)
        Me.ListView1.MultiSelect = False
        Me.ListView1.Name = "ListView1"
        Me.ListView1.Size = New System.Drawing.Size(250, 152)
        Me.ListView1.TabIndex = 7
        Me.ListView1.View = System.Windows.Forms.View.Details
        '
        'ColumnHeader1
        '
        Me.ColumnHeader1.Text = "Window Title"
        Me.ColumnHeader1.Width = 160
        '
        'ColumnHeader2
        '
        Me.ColumnHeader2.Text = "Process ID"
        Me.ColumnHeader2.Width = 85
        '
        'btnCloseAll
        '
        Me.btnCloseAll.Location = New System.Drawing.Point(160, 216)
        Me.btnCloseAll.Name = "btnCloseAll"
        Me.btnCloseAll.Size = New System.Drawing.Size(112, 32)
        Me.btnCloseAll.TabIndex = 3
        Me.btnCloseAll.Text = "Close All Processes"
        '
        'btnLaunch1
        '
        Me.btnLaunch1.Location = New System.Drawing.Point(32, 176)
        Me.btnLaunch1.Name = "btnLaunch1"
        Me.btnLaunch1.Size = New System.Drawing.Size(112, 72)
        Me.btnLaunch1.TabIndex = 1
        Me.btnLaunch1.Text = "Start Notepad"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(292, 266)
        Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.ListView1, Me.btnClose1, Me.btnCloseAll, Me.btnLaunch1})
        Me.Name = "Form1"
        Me.Text = "Process Example"
        Me.ResumeLayout(False)
    
      End Sub
    
    #End Region
    
      Private procName As String = "notepad"
      Private proc As Process
      Private processes() As Process
      Private specialFolder As String = System.Environment.GetFolderPath(Environment.SpecialFolder.System)
    
      Private Sub buildList()
        'this sub populates the listview control with the instances of 'procName'
        'that are currently running.
        Dim itemAdd As ListViewItem
        ListView1.Items.Clear()
    
        processes = Process.GetProcessesByName(procName)
    
        For Each proc In processes
          itemAdd = ListView1.Items.Add(proc.MainWindowTitle)
          itemAdd.SubItems.Add(proc.Id.ToString)
        Next
    
      End Sub
    
    
      Private Sub btnLaunch1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLaunch1.Click
        'Launch notepad and open the end user license agreement.
        Dim pInfo As New ProcessStartInfo()
        pInfo.FileName = specialFolder & "\eula.txt"
        pInfo.WindowStyle = ProcessWindowStyle.Minimized
        Dim p As Process = Process.Start(pInfo)
        p.WaitForInputIdle()
        buildList()
      End Sub
    
    
      Private Sub btnClose1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose1.Click
        'Close one of the instances of notepad based on the selected item in the ListView.
        'There are several ways to identify a process. For example,
        'you can use the mainwindowtitle, windowhandle, or processname, depending  
        'on your needs. The process ID is used here because there may be several
        'windows open with the same title.
        Try
          Dim procID As Integer = System.Convert.ToInt32(ListView1.SelectedItems(0).SubItems(1).Text)
          Dim tempProc As Process = Process.GetProcessById(procID)
          tempProc.CloseMainWindow()
          tempProc.WaitForExit()
          buildList()
        Catch
          MessageBox.Show("Please select a process in the ListView before clicking this button." + _
          " Or the Process may have been closed by somebody.")
          buildList()
        End Try
      End Sub
    
      Private Sub btnCloseAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCloseAll.Click
        'Walk the process array and close all processes.
        Try
          For Each proc In processes
            proc.CloseMainWindow()
            proc.WaitForExit()
          Next
          buildList()
        Catch ex As System.NullReferenceException
          MessageBox.Show("No instances of Notepad running.")      
        End Try
      End Sub
    
      Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        'Make sure that you do not leave any instances running.
        If Not (processes Is Nothing) Then
          If (processes.Length <> 0) Then
            Me.btnCloseAll_Click(Me, e)
          End If
        End If
      End Sub
    
    End Class
    					
    Lưu ? B?n ph?i thay đ?i m? trong Visual Basic 2005. Theo m?c đ?nh, tr?c quan Cơ b?n t?o ra hai t?p tin cho d? án khi b?n t?o m?t h?nh th?c Windows d? án. N?u m?u đư?c đ?t theo tên Form1, hai t?p tin mà đ?i di?n cho các h?nh th?c là đư?c đ?t tên theo Form1.vb và Form1.Designer.vb. B?n vi?t m? trong t?p tin Form1.vb. Các nhà thi?t k? các h?nh th?c Windows vi?t m? trong t?p tin Form1.Designer.vb. Các Windows Forms nhà thi?t k? s? d?ng các t? khóa m?t ph?n phân chia th?c hi?n Form1 thành hai t?p tin riêng bi?t. Hành vi này ngăn không cho các nhà thi?t k? t?o ra M? t? đang đư?c xen k? v?i m? c?a b?n.

    Đ? bi?t thêm v? c?i ti?n Visual Basic 2005 ngôn ng? m?i, truy c?p vào sau đây Trang Web Microsoft Developer Network (MSDN):
    http://MSDN.Microsoft.com/en-US/Library/ms379584 (VS.80) .aspx
    Đ? bi?t thêm v? các l?p h?c ph?n và các h?nh th?c Windows Nhà thi?t k?, truy c?p vào MSDN Web site sau:
    http://msdn2.Microsoft.com/en-US/Library/ms171843.aspx
    Lưu ? Đó là khuy?n cáo r?ng b?n thu h?p vùng đư?c dán nh?n Windows m?u thi?t k? đư?c t?o ra m?.
  4. Ch?y các ?ng d?ng.
  5. Nh?p vào B?t đ?u Notepad m?t hay nhi?u l?n.
  6. Nh?p vào m?t th? hi?n c?a Notepad trong các ListView c?a s? đi?u khi?n và ch?n Đóng ti?n tr?nh. Đi?u này đóng c?a trư?ng h?p c? th? c?a Notepad mà b?n đ? ch?n. B?n c?ng có th? ch?n Đóng t?t c? quá tr?nh đ? đóng t?t c? các trư?ng h?p ch?y c?a Notepad.

Ghi chú

M?u này s? d?ng các ID tài s?n c?a các Quá tr?nh l?p h?c đ? phân bi?t gi?a các trư?ng h?p c?a các ?ng d?ng. Các ID b?t đ?ng s?n là m?t ?ng c? viên t?t cho nhi?m v? này b?i v? t?t c? các x? l? ID là duy nh?t. Đúng c?a các WindowHandle b?t đ?ng s?n, do đó, b?n c?ng có th? s? d?ng các WindowHandle tài s?n c?a m?t Quá tr?nh đ?i tư?ng đ? phân bi?t gi?a các trư?ng h?p c?a các ?ng d?ng.

Các tài s?n khác c?ng có th? đư?c s? d?ng, m?c dù chúng là ít hơn r?t phù h?p v?i nhi?m v?. Ví d?, n?u b?n không bi?t quá tr?nh ID c?a m?t quá tr?nh c? th? ho?c đ? x? l? c?a c?a s? chính, b?n có th? s? d?ng các MainWindowTitle b?t đ?ng s?n đ? giúp xác đ?nh ví d? thích h?p. Các MainWindowTitle b?t đ?ng s?n có th? không duy nh?t, nhưng nó có th? giúp b?n đ? cô l?p các ?ng d?ng mong mu?n.

Các m?u trong bài vi?t này s? d?ng m?t c?a s? ?ng d?ng và s? d?ng các CloseMainWindow phương pháp đ? đóng ?ng d?ng. CloseMainWindow không làm vi?c v?i m?t không c?a s? ?ng d?ng. N?u ?ng d?ng b?n đang c? g?ng đ? đóng không có m?t c?a s? (ví d?, m?t bàn đi?u khi?n ?ng d?ng), b?n ph?i s? d?ng các Gi?t ch?t phương pháp đ? đóng ?ng d?ng.

TÀI LI?U THAM KH?O

Đ? bi?t thêm chi ti?t, xem các nhà phát tri?n Microsoft sau đây Trang Web m?ng (MSDN):
Quá tr?nh l?p
http://MSDN.Microsoft.com/en-US/Library/System.Diagnostics.process (VS.71) .aspx

Thu?c tính

ID c?a bài: 305602 - L?n xem xét sau cùng: 27 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
T? khóa: 
kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB305602 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:305602

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com