2011-02-06 31 views
1

如何強制一組特定的vb.net代碼在新線程或進程中運行?在新線程中運行vb.net

編輯1:我想TTS在vb.net,但每當點擊播放按鈕,整個程序凍結,直到演講結束

+1

我不知道,你怎麼了?如果你問一個適當的問題(至少包括一個問號),也許有人可以回答。 – Blender 2011-02-06 20:34:03

回答

3

在下面的評論中,您提到了您正在使用的庫並更改了整個答案。

回答您的問題:
在你的情況下,由於您使用的是SAPI.SpVoice庫,你不需要做相關的,因爲這個對象支持異步回放旋轉起來後臺線程和這樣的任何工作。檢查Speak方法的參數。下面是文檔:http://msdn.microsoft.com/en-us/library/ms723609(v=vs.85).aspx

回答你的問題,因爲它是提出:
最簡單的方法就是使用一個後臺工作進程運行一些代碼。這將允許您的程序運行一些漫長的過程,而不會阻塞UI線程。後臺工作者甚至提供事件來通知你的UI線程它的進度。

這裏是MSDN http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx

一個鏈接的背景工人是一些工作分拆到另一個線程一個簡單的方法,還有其他工具更復雜的情況。本質上,你創建一個後臺工作對象的實例,並將你的長時間運行的代碼添加到一個被創建來處理它的DoWork事件的函數中。還應該處理ProgressChanged和RunWorkerCompleted事件。有些方法可以被調用來取消進程。上面的MSDN鏈接提供了一些很好的完整代碼示例。

+0

類型'BackgroundWorker'未定義。我如何定義它? – 2011-02-06 21:17:54

1

包裹「若干組代碼」到我不能做任何事情方法並將其轉儲到ThreadPool上

ThreadPool.QueueUserWorkItem(AddressOf MyMethod) 
+0

傷心,線程無法解決我的問題? – 2011-02-06 20:48:41

1

線程池的建議爲我工作了WP7 Silverlight應用程序:

Private Sub AddAnagrams() 
    ClearAnagramsList() 
    UpdateAnagramsCount() 'update the count first, then add the items 
    ShowCalculating(True) 
    ThreadPool.QueueUserWorkItem(AddressOf UpdateAnagramsOnUIthread) 
    End Sub 

    Private Sub UpdateAnagramsOnUIthread() 
    Dispatcher.BeginInvoke(AddressOf UpdateAnagrams) 
    End Sub 

    Private Sub UpdateAnagrams() 
    ListAnagrams.ItemsSource = _Combinator.CombinedItems 'this is a virtualized datasource 
    ShowCalculating(False) 
    End Sub 

    Private Sub ShowCalculating(ByVal flag As Boolean) 
    LblCalculating.Visibility = If(flag, Windows.Visibility.Visible, Windows.Visibility.Collapsed) 
    End Sub