none
[vb.net]如何傳參數進進正在執行的 thread RRS feed

  • 問題

  • 我有一個需求, 需要傳參數進入一個正在執行的 thread 中, 參數的類型是字串, 請問要怎麼做呢??

    2009年1月22日 上午 01:08

解答

  • 一般來說,除了要求執行緒中斷的停止旗標外,不應該設計執行中才傳入的變數,執行中才傳入的變數不論是用共用變數或是屬性,都違反封裝原則。

     

    有此需求時,可能自行在類別覆載 Disponse / Close 比較合適。

     

    如果是選項這類可能的改變問題,我自己的做法是放到一個公用變數 Collection ,讓所有執行緒去讀那個。

     

    2009年1月25日 上午 01:32

所有回覆

  • HI,

     

    您可以使用ParameterizedThreadStart, 請參考:

    http://msdn.microsoft.com/zh-tw/library/system.threading.parameterizedthreadstart(VS.80).aspx

     

    tihs

    2009年1月22日 上午 01:35
  • 若是正在執行的
    應該宣告個變數去存放就好了
    不同Thread都可以讀的到這變數才對
    2009年1月22日 上午 01:59
  • 因為可能有好幾個 thread 在執行, 所以用變數方法可能行不通... 因為當資料被讀取完畢時, 會被清除, 以免參數重復...

    所以要問看看有無別的辨法~

    2009年1月22日 上午 02:03
  • 如果是 thread 主動要資料的話, 那可以在 thread 中 raiseevent event, 以 byref 的方式把變數值傳入
    2009年1月22日 上午 02:13
  • 跨執行緒只能用一個引數,多個引數時,就用物件或陣列來傳。

     

    例:

    Code Snippet

     

    Dim openZipThread As Threading.Thread = New Threading.Thread(AddressOf pUnZipCompressFile)

    openZipThread.Start(New Object() {strZipFile, strZipDirectory})

     

    Private Sub pUnZipCompressFile (ByVal arrParameters As Object)

        

         ' arrParameters(0) = strZipFile, arrParameters(1) = strZipDirectory

    End Sub

     

    你是要用單引數,可直接用。
    2009年1月22日 上午 03:26
  • 你好..

    你這個是 thread 在開始執行時, 將參數代進去.. 我的需求是在 thread 執行中, 將參數傳進去...

    2009年1月22日 上午 06:42
  • Hi,

    可以將執行緒封裝在類別裡面,類別在去實作相關的屬性或是Sub/Function,類別裡面自己去維護各類別中的變數內容。

    2009年1月22日 上午 08:14
    版主
  • 一般來說,除了要求執行緒中斷的停止旗標外,不應該設計執行中才傳入的變數,執行中才傳入的變數不論是用共用變數或是屬性,都違反封裝原則。

     

    有此需求時,可能自行在類別覆載 Disponse / Close 比較合適。

     

    如果是選項這類可能的改變問題,我自己的做法是放到一個公用變數 Collection ,讓所有執行緒去讀那個。

     

    2009年1月25日 上午 01:32
  • HI,

    要在執行緒執行時傳入資料, 可以利用PostThreadMessage, 請參考:
    http://www.webtropy.com/articles/art9-1.asp?f=PostThreadMessage

    tihs
    2009年2月3日 上午 02:28
  •  我對於問題有點模糊 ^^"

    1.資料被讀取完畢時, 會被清除。清除的時機點是?
    ==>所有 thread都處理過? 或是某個 thread處理過就清除?

    2. thread如何接收資料?
    ==>鎖定 thread等待 Event? 或是在 thread裡有迴圈檢查? 或是實作了Message Pump?


    學無止境
    2009年2月7日 下午 06:38