ORCS Web, Managed Complex Hosting - Support
Client Comments
Keep up the great work - I wish you could teach the other hosting companies how to maintain your level of availability!
Skip Navigation Links

Threading Proof of Concept Code Snippet Using .NET 2.0
By Steve Schofield
April 26, 2006

This code sample shows how to start multiple threads to enhance performance. I was looking for a way to increase performance of a console application that records information to a database. The code sample listed below has a couple of techniques.  The first starts many threads and is used in the MyNewThread class.

The 'foo' class will spawn threads and wait for 30 seconds, then the thread is destroyed. This can help when you need to ensure results of connecting to the remote machine are returned. If there is an error, your code can evaluate and handle the error.

I recommend you check out Google for additional code samples or MSDN to provide help. This code is a 'hello world' app but can ensure your code will work before integrating into a larger application.

Imports System.Threading

 

Module Module1

 

    Sub Main()

        Dim x As Integer = 0

        For x = 0 To 3

            Dim newThread As New Thread(AddressOf Spawn)

            newThread.Start()

        Next

 

        Console.WriteLine("Done")

    End Sub

 

    <MTAThread()> Public Sub Spawn()

        'One Test to just start machine threads

        'Test.foo()

 

        'Start a new thread to do some work and waite for a response

        MyNewThread.MyThread()

    End Sub

End Module

 

Public Class Test

 

    <MTAThread()> _

Public Shared Sub foo()

        Dim newThread As New Thread(AddressOf Work.DoWork)

        newThread.Start()

 

        'Dim w As New Work()

        w.Data = 42

        newThread = New Thread(AddressOf w.DoMoreWork)

        newThread.Start()

    End Sub

End Class

 

 

Public Class Work

    Public Shared Sub DoWork()

        Console.WriteLine("Static thread procedure.")

    End Sub

 

    Public Data As Integer

 

    Public Sub DoMoreWork()

        Console.WriteLine("Instance thread procedure. Data={0}", Data)

    End Sub

End Class

 

Public Class MyNewThread

    Private Delegate Sub m_delMyDelegate()

    <MTAThread()> Public Shared Sub MyThread()

        Dim delThread1 As m_delMyDelegate = AddressOf GetComputerInfo

        Dim ar1 As IAsyncResult

        Dim a_WaitHandles(0) As System.Threading.WaitHandle

 

        ar1 = delThread1.BeginInvoke(Nothing, Nothing)

        a_WaitHandles(0) = ar1.AsyncWaitHandle

        System.Threading.WaitHandle.WaitAll(a_WaitHandles, 30000, False)

 

        If ar1.IsCompleted Then delThread1.EndInvoke(ar1)

    End Sub

 

    Private Shared Sub GetComputerInfo()

        Threading.Thread.Sleep(29999)

    End Sub

End Class

Steve Schofield is a Senior Internet Support Specialist with ORCS Web, Inc. - a company that provides managed hosting solutions for clients who develop and deploy their applications on Microsoft Windows platforms. Services include shared hosting, dedicated hosting, and webfarm hosting, with specialty in .Net, SQL Server, and architecting highly scalable solutions.

Copyright © 1996-2007 ORCS Web, Inc. All rights reserved.