Click here to Skip to main content
15,881,248 members
Articles / Programming Languages / Visual Basic
Article

Multithreading with VB.NET - A beginner's choice

Rate me:
Please Sign up or sign in to vote.
3.45/5 (60 votes)
8 Aug 20061 min read 381.3K   18.3K   104   92
Multithreading is a technique by which you can increase the efficiency of your program by 100%. Everybody wants to apply multi-threading in their own applications. But for beginners, it's a bit difficult to apply multi-threading properly. But it's quite easy with VB.NET.

Sample Image - mutithreading_for_beginer.gif

Introduction

Hi friends,

This is my first article on Code-Project on the topic Multithreading in VB.NET.

Multithreading is a technique, by which you can increase efficiency of your program by 100%. Every body wants to apply multi threading in their own application. But for beginner it's a bit difficult to apply multi threading properly. I had the same problem, when I was going to use it in my application. That's why I am writing this article, that beginner can easily apply multi threading in their application. I am trying to make it as simple as possible.

I am not writing this article against some ones request. Rather than, I am writing this article, as I personally faced a big problem on this topic. It was so hard to find out a good solution or help on "How to apply threading on application".

After so much study, search on google and on other forums at last I was able to apply multi threading in my application.

Multi Threading is not a critical or complex thing to do. But many people don't now how to apply it. They can get sample code, but can't implement it on their own project. Or they face trouble, when they try to apply the code in their application.

I am not writing much code here. Because, if you download the source code, provided with this article, you will find comment through out each line of coding. So I am not repeating them again here

The heart of this project is the following line of coding

VB
'The main mother class in .NET Framework to work with threading. 

Imports System.Threading  

'Creating Thread 
Dim objThreadClass As New clsThread(2, Me)
Dim objNewThread As New Thread(AddressOf objThreadClass.StartThread)
objNewThread.IsBackground = True
objNewThread.Start()
m_ThreadList.Item(1) = objNewThread 

'Receiving Message from thread
Public Sub ReceiveThreadMessage(ByVal ThreadIndex As Integer, _
                                ByVal Counter As Integer) 
    'do your work here depending on the return variables from the thread. 
End Sub 


'Sending Message from thread to the main application.
'First create a delegate (For details plz see the comments inside the codes) 

Private Delegate Sub NotifyMainWindow(ByVal ThreadIndex As Integer, _
                                      ByVal Counter As Integer)
'We need an object of this deletegate
Private m_NotifyMainWindow As NotifyMainWindow  

'Assign the pointer to the method of the main window to the delegate
m_NotifyMainWindow = AddressOf MainWindow.ReceiveThreadMessage 

'Create Argument List

ReDim m_Args(1)
m_Args(0) = m_ThreadIndex
m_Args(1) = m_Counter

'Call the notificaiton method on the main window by the delegate
m_MainWindow.Invoke(m_NotifyMainWindow, m_Args)

If this helps you, I'll be so happy

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
India India
Hi,
This is Rakesh Mehta from India.
I am very very fond of programming (in any field).
I like to work on new technologies. Sometime, I face troubles, while looking for a new thing.
I am working as a Project Manager in Silicon Valley Infomedia Pvt Ltd. (India).
I'ld like to share all my new findings and solutions of problems with code project.

Comments and Discussions

 
GeneralMy vote of 5 Pin
picengraver22-Jan-21 4:40
picengraver22-Jan-21 4:40 
Questionc#.net Pin
Member 125538136-Jun-16 23:07
Member 125538136-Jun-16 23:07 
QuestionDecent Intro Pin
majict21-Jun-14 11:21
majict21-Jun-14 11:21 
It is functional, but buggy. The buttons that start threads are not consistent in references to the thread numbers, so you get improper messages that a thread is busy, since the hard-coded thread numbers have been mixed up. That's easy enough to fix. (Best to make the thread number a local variable and reference the variable, rather than (mis)type a number).

The big problem is the form code behind is doing work that is inappropriate. This eliminates the ability to reuse the code without cutting and pasting, if you want to use the same code in a different form. The code after the labels referred to by the GOTOs should be in its own class (call it clsThreadController, for example). Notice that it is the exact same code, four places, except for the thread number. Again, pretty easy to fix if you are a good OO programmer. Then, it is the clsThreadController that is starting the thread, not the form code behind. The form code behind has no business starting threads!

DON'T PUT CODE IN THE FORM CODE BEHIND THAT DOESN'T SPECIFICALLY RELATE TO THE USER INTERFACE! This is why novice coders find that they don't get the benefits of code-reuse, since their code is not really Object Oriented...you have mixed the user interface with the tasks that could otherwise be reused.

Re-factor, re-factor, re-factor.... It costs you an hour today, but you will forever be able to use that routine that you spent so much time on! You get a lifetime of re-usability for simply taking the time to re-factor. How powerful is that?

When you are done, you get a set of Thread Classes that you can plug in to anything you EVER want to thread!

Also, I understand the intention of putting so many comments in the code. But if you re-factor the names of variables and method names, the code will document itself. I only understood the example when I went through and eliminated all comments and then named things as they are. In-line comments should be avoided unless it is a TODO item or you are using a slight-of-hand.
QuestionGreat starting point Pin
Cyrus-IRA17-Mar-14 13:26
Cyrus-IRA17-Mar-14 13:26 
GeneralMy vote of 5 Pin
JOE Heart Under Blade11-Sep-13 19:18
JOE Heart Under Blade11-Sep-13 19:18 
QuestionWhich language to use for GCS Pin
Member 99565733-Apr-13 19:46
Member 99565733-Apr-13 19:46 
GeneralMy vote of 1 Pin
sandippatil4-Feb-13 19:07
sandippatil4-Feb-13 19:07 
QuestionDraw graphics Pin
hari ram yadav22-Jan-13 20:30
hari ram yadav22-Jan-13 20:30 
GeneralMy vote of 5 Pin
wayvirgo6-Jan-13 10:45
wayvirgo6-Jan-13 10:45 
GeneralMy vote of 5 Pin
Osama Al Shammari21-Dec-12 7:33
professionalOsama Al Shammari21-Dec-12 7:33 
GeneralThanks! Pin
itcywel2-Aug-12 17:37
itcywel2-Aug-12 17:37 
GeneralMy vote of 5 Pin
UltronX3-Jul-12 1:40
UltronX3-Jul-12 1:40 
GeneralMy vote of 5 Pin
Manoj Kumar Choubey5-Mar-12 21:23
professionalManoj Kumar Choubey5-Mar-12 21:23 
QuestionTAPI Pin
Member 79538385-Jan-12 6:28
Member 79538385-Jan-12 6:28 
GeneralMy vote of 5 Pin
Sandro7022-Nov-11 23:40
professionalSandro7022-Nov-11 23:40 
QuestionConfused: explain Invoking the main window.. Pin
Archie_dev2-Jul-11 21:32
Archie_dev2-Jul-11 21:32 
Generalgreat example Pin
azmat ahmed24-May-11 7:49
azmat ahmed24-May-11 7:49 
GeneralMy vote of 5 Pin
Member 466330528-Mar-11 23:25
Member 466330528-Mar-11 23:25 
GeneralButton4,6 and 8 code errors Pin
Member 384809418-Mar-11 5:54
Member 384809418-Mar-11 5:54 
GeneralRe: Button4,6 and 8 code errors Pin
podman@guru25-Nov-11 5:18
podman@guru25-Nov-11 5:18 
GeneralMy vote of 5 Pin
NIRMAL UPADHYAY28-Feb-11 22:12
NIRMAL UPADHYAY28-Feb-11 22:12 
GeneralMy vote of 5 Pin
Member 14582303-Jan-11 22:03
Member 14582303-Jan-11 22:03 
GeneralMy vote of 5 Pin
sandeep00773417-Nov-10 8:38
sandeep00773417-Nov-10 8:38 
GeneralMy vote of 3 Pin
v65j9-Jul-10 18:37
v65j9-Jul-10 18:37 
GeneralMy vote of 1 Pin
Minhajul Shaoun5-Dec-09 14:53
Minhajul Shaoun5-Dec-09 14:53 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.