none
[VB 2005] 想在模組裡面建立Backgroundworker及其的事件 RRS feed

  • 問題

  • 各位老師好
    今天我想問的問題,就是
    我如果在模組裡面新增一個 Public BGW_Ready As New System.ComponentModel.BackgroundWorker
    那關於 BGW_Ready 的 DoWork 事件 與 其他的事件 該怎麼寫呢?

    謝謝各位老師
    易耳易兒
    2009年4月9日 上午 09:17

解答

  • Allen:
             用addhandler
             example:
    Module Module1
        Public BGW_Ready As New System.ComponentModel.BackgroundWorker
        Public Sub BGW_init()
            AddHandler BGW_Ready.DoWork, AddressOf BGW_DoWork
        End Sub
        Private Sub BGW_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
            MessageBox.Show("DoWork")
        End Sub
    End Module

     主程式的範例
    Public Class Form1
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Module1.BGW_init()
            Module1.BGW_Ready.RunWorkerAsync()
        End Sub
    End Class

    希望對你有幫助
    • 已標示為解答 Allen_Yang 2009年4月9日 上午 09:51
    • 已取消標示為解答 Allen_Yang 2009年4月10日 上午 02:51
    • 已標示為解答 bauannModerator 2009年4月17日 上午 02:23
    2009年4月9日 上午 09:36
    版主

所有回覆

  • Allen:
             用addhandler
             example:
    Module Module1
        Public BGW_Ready As New System.ComponentModel.BackgroundWorker
        Public Sub BGW_init()
            AddHandler BGW_Ready.DoWork, AddressOf BGW_DoWork
        End Sub
        Private Sub BGW_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
            MessageBox.Show("DoWork")
        End Sub
    End Module

     主程式的範例
    Public Class Form1
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Module1.BGW_init()
            Module1.BGW_Ready.RunWorkerAsync()
        End Sub
    End Class

    希望對你有幫助
    • 已標示為解答 Allen_Yang 2009年4月9日 上午 09:51
    • 已取消標示為解答 Allen_Yang 2009年4月10日 上午 02:51
    • 已標示為解答 bauannModerator 2009年4月17日 上午 02:23
    2009年4月9日 上午 09:36
    版主
  • 謝謝 Bill 老師

    有用了

    謝謝
    易耳易兒
    2009年4月9日 上午 09:50
  • Bill老師

    我剛發現一個問題

    我試了你的方法是沒有問題的,不過我發現是因為我再FrmMajor裡面拖曳了一個BGW_Ready 的物件

    當我把 BGW_Ready 物件移除的時候

    執行這個執行緒,就出現"引動過程發生例外狀況"的例外訊息

    請問老師為什麼呢?

    謝謝
    易耳易兒
    2009年4月10日 上午 02:53
  • Allen:
            不太瞭解你描述的東西,可以貼碼上來看一下嗎?
                       
              
    2009年4月10日 上午 03:31
    版主
  • Bill老師
    就是我只用程式碼去建立 Backgroundworker
    code:
    在模組裡:
      Public WithEvents BGW_Ready As New System.ComponentModel.BackgroundWorker
        Public iiiii As Long
        Public Sub BGW_Ready_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BGW_Ready.DoWork
            If iiiii <= 100000 Then
                iiiii += 1
            End If
        End Sub
        Public Sub BGW_Ready_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BGW_Ready.RunWorkerCompleted
            FrmMajor.Text = iiiii
            If iiiii <= 100000 Then
                BGW_Ready.RunWorkerAsync()
            End If
        End Sub
    
    
    
        Public Sub BGW_Ready_init()
            AddHandler BGW_Ready.DoWork, AddressOf BGW_Ready_DoWork
            AddHandler BGW_Ready.RunWorkerCompleted, AddressOf BGW_Ready_RunWorkerCompleted
        End Sub
    在主表單_Load :

      BGW_Ready_init()


    在主表單新增一個Button
    Button_click 事件內 :

     BGW_Ready.RunWorkerAsync()




    就這樣而已...

    按下Button後 就出現"引動過程發生例外狀況"的例外訊息


    謝謝老師
    易耳易兒
    2009年4月10日 上午 03:55
  • Allen:
            Public WithEvents BGW_Ready As New System.ComponentModel.BackgroundWorker
             這一行你用了 WithEvents宣告,然後又AddHandler BGW_Ready.DoWork, AddressOf BGW_Ready_DoWork 
             我之前會用AddHandler,是因為不習慣使用 WithEvents.
             你仔細看我之前寫的程式, 是沒有粗體字那部份的
                Public Sub BGW_Ready_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BGW_Ready.DoWork

             如果你用了WithEvents,而且已在事件中使用了 Handles關鍵字 ,就要把
             AddHandler BGW_Ready.DoWork, AddressOf BGW_Ready_DoWork
             AddHandler BGW_Ready.RunWorkerCompleted, AddressOf BGW_Ready_RunWorkerCompleted
             拿掉
    2009年4月10日 上午 04:09
    版主