2010-02-23 30 views
0

能否像這樣開始線程不是很好嗎?你喜歡這種想法嗎? (關於主題)

Sub DoStuff() 
    Using MyThead = New Threading.Thread() 
     'Do stuff on MyThread. 
    End Using 
End Sub 

這是更少的代碼編寫和看起來更好比:

Sub DoStuff() 
    Dim MyThread As New Threading.Thread(AddressOf DoStuffThread) 
    MyThread.Start() 
End Sub 

Sub DoStuffThread() 
    'Do Stuff 
End Sub 

回答

6

這已經是可能的(與位更多的噪聲)在C#中使用匿名委託:

new Thread(() => { 
    // do stuff on thread 
}).Start(); 

並且將在VB 10經由多lambda表達式得到支持:

New Thread(Sub() 
      ' do stuff on thread 
      End Sub).Start() 

(I可以具有VB語法錯誤,我沒有真正玩過VB 10.)

+1

或者Java內部類,或C++ 0x lambdas或LISP,或者... – 2010-02-23 00:47:24

1

所以,在你的榜樣......一個線程將被創建,包含的代碼到最終使用,並開始執行在平行下?

不,我根本不喜歡那樣,它很不清楚發生了什麼。如果你認爲它的工作方式不同,請更新你的問題來描述你的概念。

1

End Using之後的代碼何時運行?是否等到線程結束,或者塊是否立即返回?如果它等到線程完成,那麼啓動線程有什麼意義呢?但如果它不是等待,那麼如果你想獲得線程的返回值,你會怎麼做?

確實存在比您提到的標準成語更優雅的成語。例如,在C#中,您可以使用匿名代理來完成同樣的事情,而C#4.0有各種線程相關的工具。但是你的榜樣沒有說明其中的一個。

+0

那麼讓我知道一些其他的方法來做到這一點。我發現這樣做的傳統方法不是很優雅。 – Tomasi 2010-02-23 00:12:12