开发者

running vb.net in a new thread

how do I force a particular set of vb.net codes to run in a new thread or process.?

Edit 1: I am trying TTS in vb.net but whenever click the play button , The whole program freezes and I cannot do anyth开发者_如何学编程ing else until the speech is over


In a comment below you mention the library you are using and that changes this whole answer.

Answer to your problem:
In your case since you are using the SAPI.SpVoice library you don't need to do any work related to spinning up background threads and such since that object support asynchronous playback. Check out the arguments of the Speak method. Here is the documentation: http://msdn.microsoft.com/en-us/library/ms723609(v=vs.85).aspx

Answer to your question as it is posed:
The simplest method is to use a background worker process to run some code. This will allow your program to run some long process and not block the UI thread. The background worker even provides events to notify your UI thread of it's progress.

Here is an link to MSDN http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx

The background worker is a simple way to spin off some work onto another thread, there are other tools for more complex scenarios. In essence you create an instance of a background worker object and add your long-running code to a function that is created to handle it's DoWork event. There are ProgressChanged and RunWorkerCompleted events that should be handled as well. There are methods that can be called to cancel the process. The MSDN link above provides a couple of good complete code examples.


Wrap the "set of codes" into a method and dump it onto the ThreadPool

   ThreadPool.QueueUserWorkItem(AddressOf MyMethod)


the ThreadPool suggestion worked for me for a WP7 Silverlight app:

  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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜