Library tutorials & articles

.NET Threading Part I

Join

Before .NET, I was often asked questions about how to wait for a Win32 thread to exit. The solution was to acquire a handle to the thread and wait on the handle. Or alternatively, you could setup an event that was triggered at the end of the thread and wait on that event. .NET provides us with a simpler method of doing the same. If you call the Thread.Join instance method, then the current thread will wait until the thread represented by the Thread object is terminated.

using System;
using System.Threading;
using System.Diagnostics;

namespace ConsoleApplication7
{
    class Class1
    {
        public void Pump()
        {
            for (int i= 0; i< 100; i++)
            {
                Console.WriteLine("Value {0}", i);
                Thread.Sleep(1);
            }
        }

        static void Main(string[] args)
        {
            Class1 obj = new Class1();
            Thread pump = new Thread(
                new ThreadStart(obj.Pump));
            pump.Start();
            Thread.Sleep(500); // force the other thread
            // thru a couple iterations
            pump.Join(); // wait until the thread is
            // completed
            Console.WriteLine("Goodbye");
        }
    }
}

In this previous listing, the main thread creates a new thread (pump), then waits for the thread to complete by calling the pump.Join instance method. If you run the previous code, as is, then the output will be the numbers 0 to 99 and finally the word Goodbye. If you remove the call to pump.Join, then the Goodbye message may be printed before the last number. I chose to put the main thread to sleep for half a second as this displayed the Goodbye message in the middle of the stream of numbers (when pump.Join was removed).

Comments

  1. 27 Feb 2004 at 22:06

    I was asked to do the following:
    write the method call to begin running the thread and begin processing
    (a) namespace = testProject
    (b) form to run = frmMain


    All the things that I have read on threading so far say that a thread point to a function of whatever comes after the "addressOf" in the argument.  Therefore, I don't understand what (a) and (b) are trying to refer to or specify.  If you happen to understand what that question is looking for, or know any good literature I can look at for the given topic, please let me know.  Thank you.
    email me

  2. 04 Nov 2003 at 15:04
    Quote:
    [1]Posted by James Crowley on 4 Nov 2003 02:52 PM[/1]
    Are you ensuring that the page doesn't finish loading before both threads have returned a result? Otherwise, you may find that ASP.NET is outputting the page to the client before the thread has actually called the callback!



    Yes...and if I may add, rather hesitantly at this juncture, I did think about that.
    What surprised me however was when I ran this in debugging mode, I as able to trace both callbacks
    and in one case the dataset returned had no data. I wonder if  there are any issues with returning non-simple types
    in the event driven call back. May be, using the delegate mechanism may work. I havn't done
    much callback based threading so far...
  3. 04 Nov 2003 at 14:52
    Are you ensuring that the page doesn't finish loading before both threads have returned a result? Otherwise, you may find that ASP.NET is outputting the page to the client before the thread has actually called the callback!
  4. 04 Nov 2003 at 13:20
    I have tried threading in my web page. I tried to fill two drop-downs by threading two methods in two different business layer objects from my web page. I used the event call back method  to return two datasets (one for each drop down) but got  inconsistent results..drop-downs were populated and sometimes not. Any ideas?
  5. 01 Jan 1999 at 00:00

    This thread is for discussions of .NET Threading Part I.

Leave a comment

Sign in or Join us (it's free).

Randy Charles Morin Randy's article are Copyright 1998-2003 Randy Charles Morin

Related podcasts

  • A Practical Look at Silverlight 2 Part 1

    Now that Silverlight 2 is at the Olympics and making a big splash, we wanted to explore this fascinating technology more. Microsoft Silverlight 2 is a cross-browser, cross-platform, and cross-device plug-in for delivering the next generation of .NET based media experiences and rich interactive ap...

Events coming up

  • Dec 9

    GL.net Group Meeting - December 2009

    Gloucester, United Kingdom

    The beginning of this year holiday season will belong to mocks. Ronnie and Stephen will take us for a tour around exciting world of unit testing.

We'd love to hear what you think! Submit ideas or give us feedback