VBNET線程和委托20191223


 

1、每個程序有一個主線程,如果一個循環處於主線程中,程序在較長的循環,將出現“不響應”的情況。

     線程在System.Threading中。線程創建可專用於一個功能塊(方法、函數), 線程的開始用Start方法,線程的結束用Abort方法,線程的暫停使用Sleep方法

 

2、委托的思想,就是自己不能干或不想干的事,委托另一個有能力或有權限的人去干那件事。

     實際上,我們一直要用委托思想,比如基本類型的變量名。Dim  i  As  Integer

     除了變量名可以用委托一樣,方法(sub)也可以用委托,這就是我們普通所說的委托。

     定義和使用大致與變量名的方式一樣:

    (1)定義委托類型:  Private Delegate Sub   VoidShow(ByRef i As Int32)     '參數多種,多個)

    (2)定義要賦的具體“值”(要做的事情和方法):  這里的具體值,不是值,而是一個具體的方法,方法的形式必須與上面定義保持一致。就象變量名是整形時,賦值也應該是整形,而不是String.  例如:Private Sub TureShowNumber(ByRef i As Int32)  '方法名自定,但形式與(1)保持一致

    (3)調用這個值: 也就是委托去辦事。用Invoke方法:Control.Invoke(New  MyDelegate(AddressOf TureShowNumber),  intValue)

Imports System.Threading

Public Class Form1


    Dim mythread As Thread
    Private Delegate Sub VoidShow(ByRef i As Int32) '定義要委托的類型


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        mythread = New Thread(AddressOf ShowNumber) '構造線程
        mythread.Name = "myShowNumber"
        mythread.Start() '啟動線程
        mythread.Sleep(5000) '啟動線程
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        TextBox2.Text = "終於出現奇跡"
    End Sub



    Private Sub ShowNumber()
        Dim i As Int32
        For i = 0 To 123451
            ' TextBox1.Text = i
            Me.Invoke(New VoidShow(AddressOf TureShowNumber), i) '用New構造委托,再用Invoke執行
        Next

        mythread.Abort() '終止線程
    End Sub

    Private Sub TureShowNumber(ByRef i As Int32)    '新加入的被委托要做的事
        TextBox1.Text = i
    End Sub



End Class

 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM