Multi-threading Debugging Enhancements in Visual Studio 2008
- Posted: Sep 25, 2007 at 3:42 AM
- 15,663 Views
- 8 Comments
Download
How do I download the videos?
- To download, right click the file type you would like and pick “Save target as…” or “Save link as…”
Why should I download videos from Channel9?
- It's an easy way to save the videos you like locally.
- You can save the videos in order to watch them offline.
- If all you want is to hear the audio, you can download the MP3!
Which version should I choose?
- If you want to view the video on your PC, Xbox or Media Center, download the High Quality WMV file (this is the highest quality version we have available).
- If you'd like a lower bitrate version, to reduce the download time or cost, then choose the Medium Quality WMV file.
- If you have a Zune, WP7, iPhone, iPad, or iPod device, choose the low or medium MP4 file.
- If you just want to hear the audio of the video, choose the MP3 file.
Right click “Save as…”
- Mid Quality WMV (Lo-band, Mobile)
- MP3 (Audio only)
- High Quality MP4 (iPad, PC)
- MP4 (iPod, Zune HD)
- Mid Quality MP4 (WP7, HTML5)
Author: Hi, I am Daniel Moth
![]()
Introduction: They say debugging is a skill and that threading is hard so when you put the two together, you have a challenge. Visual Studio 2008 has added a handful of small new featurettes to help with that. Watch the 15' video for more.
Video download: Click on the image to play the video (from a streaming file). If you'd prefer to download the wmv packaged in a zip file, you may do so here.
Comments Closed
Comments have been closed since this content was published more than 30 days ago, but if you'd like to continue the conversation,
please create a new thread in our Forums,
or
Contact Us and let us know.
Follow the Discussion
I was wondering if your example code is avalaible for analysis.
Thanks in advance.
Glad you enjoyed it luiscperu (and I see you joined channel9 today - welcome!)
Typically I make sure to show all the code in my videos so they can be easily replicated. It is only thru typing it in yourself you get to "feel" the code. Having said that, I still had this project kicking around so I've uploaded here for you:
http://www.danielmoth.com/Blog/ThreadPlay.zip
Hello,
Strict OnI've included the code for a class that I'm struggling with.
(I've omitted the FormStatus object, but any form with a lblStatus label would do).
The purpose of the class is to display a StatusForm on a separate thread.
The StatusForm has a rotating logo, and a label that can get updated to reflect status on the main thread...
Sample usage from some class, or form...(within a loop or long running routine)
'Would be called to display a "TopMost" form indicating status..
ClsAsyncStatusDisplay.DisplayStatus("Doing something...")
ClsAsyncStatusDisplay.DisplayStatus("25% Complete...")
ClsAsyncStatusDisplay.DisplayStatus("50% Complete...")
'Would be called to hide the form from view
ClsAsyncStatusDisplay.HideStatus()
My class works 99% of the time, but occassionally the class "locks up"...
I'm open to ANY suggestions! -- I'm sure there's a much better tecnique than this...
Thanks.
Option
Option Explicit On
Public
Class ClsAsyncStatusDisplay Private Shared _thisInstance As ClsAsyncStatusDisplay Private Message As String = ""Private WithEvents StatusThread As System.Threading.Thread
Private WithEvents StatusForm As FormStatus
Private Delegate Sub SetTextCallback(ByVal [text] As String) Private _DelegateSetTextCallBack As New SetTextCallback(AddressOf SetText) Private Delegate Sub CloseFormCallBack() Private _DelegateCloseFormCallBack As New CloseFormCallBack(AddressOf CloseForm) Private Sub New() 'Forces Singleton Class End Sub Public Shared Sub DisplayStatus(ByVal msg As String, Optional ByRef obj As Control = Nothing) If IsNothing(_thisInstance) Then
_thisInstance =
New ClsAsyncStatusDisplay End If If IsNothing(_thisInstance.StatusThread) Then_thisInstance.StatusThread =
New System.Threading.Thread(AddressOf _thisInstance.ShowForm)System.Threading.Thread.Sleep(750)
'Don't display status unless outside process is taking almost 1 second to complete...._thisInstance.StatusThread.Start()
ElseIf Not IsNothing(_thisInstance.StatusThread) And _thisInstance.StatusThread.ThreadState = Threading.ThreadState.Stopped Then_thisInstance.StatusThread =
Nothing_thisInstance.StatusThread =
New System.Threading.Thread(AddressOf _thisInstance.ShowForm)System.Threading.Thread.Sleep(750)
'Don't display status unless outside process is taking almost 1 second to complete...._thisInstance.StatusThread.Start()
Else_thisInstance.SetText(msg)
End If_thisInstance.Message = msg
End Sub Public Shared Sub HideStatus() If Not IsNothing(_thisInstance.StatusForm) Then_thisInstance.CloseForm()
End If End Sub Private Sub ShowForm() Try If IsNothing(_thisInstance.StatusForm) OrElse _thisInstance.StatusForm.IsDisposed Then_thisInstance.StatusForm =
New FormStatus End IfSetText(_thisInstance.Message)
If _thisInstance.StatusForm.IsDisposed = False Then_thisInstance.StatusForm.ShowDialog()
End If Catch ex As Exception 'Do Nothin' Me.CloseForm() End Try End Sub Private Sub CloseForm() Try If _thisInstance.StatusForm.InvokeRequired Then_thisInstance.StatusForm.Invoke(_DelegateCloseFormCallBack)
Else If Not IsNothing(_thisInstance.StatusForm) And Not _thisInstance.StatusForm.IsDisposed Then_thisInstance.StatusForm.Close()
End If End If Catch ex As Exception 'Do Nothin' End Try End Sub Private Sub SetText(ByVal [text] As String) Try If Not IsNothing(_thisInstance.StatusForm) AndAlso _thisInstance.StatusForm.Disposing = False AndAlso _thisInstance.StatusForm.IsDisposed = False Then ' InvokeRequired required compares the thread ID of the ' calling thread to the thread ID of the creating thread. ' If these threads are different, it returns true. If _thisInstance.StatusForm.lblStatus.InvokeRequired Then_thisInstance.StatusForm.lblStatus.Invoke(_DelegateSetTextCallBack,
New Object() {[text]}) Else_thisInstance.StatusForm.lblStatus.Text = [text]
End If End If Catch ex As Exception 'do nothin Me.CloseForm() End Try End SubEnd
ClassSorry to hear about your problem.
You have confused this place (which is about that specific video on the top) with some kind of generic support forum (which this isn't).
Please pick a more appropriate forum, starting here:
http://forums.microsoft.com/MSDN/
Good luck!
Cheers
Daniel
Good sharing. Thanks
Remove this comment
Remove this thread
close