Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

How to use multi-threading in VB.NET (ASP.NET)

Posted on 2003-11-03
5
Medium Priority
?
1,991 Views
Last Modified: 2007-12-19
I am trying to run a process in the background to do some processing (calling a vb class in my project) when a user hits my aspx page.  I have tested my class independantly of the threading call and it works without error.  I cannot get the code to work with the threading.  I would like the user to be able to go on and use the web-app without having to wait for the process to complete.  Any help appreciated.

the ASPX page (code behind):

Imports System.Threading

Public Class home
    Inherits System.Web.UI.Page

#Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub

#End Region

    Private clsUtility As New SPN.cSysUtility()
    Private clsDBJob As New SPN.cSysDBJob()
    Private thrdDBJob As Thread

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Put user code to initialize the page here
        thrdDBJob = New Thread(New ThreadStart(AddressOf DoDBJob))
        thrdDBJob.IsBackground = False
        thrdDBJob.Priority = ThreadPriority.Highest
        thrdDBJob.Start()
    End Sub

    Private Sub DoDBJob()
        clsDBJob.DoCheckProviders(Session("DBConnString"))
        clsDBJob.DoCheckOpportunities(Session("DBConnString"))
        thrdDBJob.Abort()
    End Sub

End Class

---------------------------------------------------------------------------------------

the VB CLASS:

'---------------------------------------------------------------------------------------------------------------------------------
' Class Name    : cSysNotify.vb
'---------------------------------------------------------------------------------------------------------------------------------
' Class Description:
' Contains functionality to run scheduled databse jobs; can be multithreaded
'---------------------------------------------------------------------------------------------------------------------------------

Imports System.Data.OleDb
Imports System.Runtime.Serialization


<Serializable()> Public Class cSysDBJob

    Private clsNotify As New SPN.cSysNotify()

    Public Sub DoCheckProviders(ByVal paramConnectionString As String)
     ...
    End Sub

    Public Sub DoCheckOpportunities(ByVal paramConnectionString As String)
     ...
    End Sub
End Class
---------------------------------------------------------------------------------------

0
Comment
Question by:thomasdodds
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
5 Comments
 
LVL 4

Expert Comment

by:NetPointer
ID: 9673647
Why u r aborting this thread??

It will automatically be finished..

Regards,
NetPointer
0
 
LVL 6

Author Comment

by:thomasdodds
ID: 9673663
um ... to be honest that is the evidence of my last attempt ... I thought perhaps that if I could get it to run once, that it might not get cleaned up automatically ... I will remove that line ... but I can't get the code to run - so that is really inconsequential
0
 
LVL 6

Author Comment

by:thomasdodds
ID: 9673674
also - I receive the following when I debug:

An unhandled exception of type 'System.Runtime.Serialization.SerializationException' occurred in Unknown Module.

Additional information: The type System.Web.HttpException in Assembly System.Web, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a is not marked as serializable.

I set my breakpoint on the following:  "Private Sub DoDBJob()" and it errors on: "clsDBJob.DoCheckProviders(Session("DBConnString"))"


0
 
LVL 23

Accepted Solution

by:
naveenkohli earned 2000 total points
ID: 9673785
If you need some variables passed into the Thread function, then use SetData. See how slots are used to pass data in.
0
 
LVL 6

Author Comment

by:thomasdodds
ID: 9674051
naveenkohli,

thx for pointing me in the right direction!

This is what works - most likely could use some refinement ... again, a big thank you!

-----------------------------------------------------------------------------------------

ASPX page:

Imports System.Threading

Public Class home
    Inherits System.Web.UI.Page

#Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub

#End Region

    Private clsUtility As New SPN.cSysUtility()
    Private clsDBJob As New SPN.cSysDBJob()
    Private thrdDBJob As Thread

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Put user code to initialize the page here
        'DoDBJob()
        thrdDBJob = New Thread(New ThreadStart(AddressOf DoDBJob))
        thrdDBJob.IsBackground = False
        thrdDBJob.Priority = ThreadPriority.Highest
        thrdDBJob.AllocateNamedDataSlot("DBConnString")
        thrdDBJob.SetData(thrdDBJob.GetNamedDataSlot("DBConnString"), Session("DBConnString"))
        clsDBJob.strConnectionString = thrdDBJob.GetData(thrdDBJob.GetNamedDataSlot("DBConnString"))
        thrdDBJob.FreeNamedDataSlot("DBConnString")
        thrdDBJob.Start()
    End Sub

    Private Sub DoDBJob()
        clsDBJob.DoCheckProviders()
        clsDBJob.DoCheckOpportunities()
    End Sub

End Class

--------------------------------------------------------------------------------------------------------------------------
VB CLASS

'---------------------------------------------------------------------------------------------------------------------------------
' Class Name    : cSysNotify.vb
'---------------------------------------------------------------------------------------------------------------------------------
' Class Description:
' Contains functionality to run scheduled databse jobs; can be multithreaded
'---------------------------------------------------------------------------------------------------------------------------------

Imports System.Data.OleDb
Imports System.Runtime.Serialization
Imports System.Web.SessionState


<Serializable()> Public Class cSysDBJob

    Private clsNotify As New SPN.cSysNotify()
    Public strConnectionString As String

    Public Sub DoCheckProviders()
     ...
    End Sub

    Public Sub DoCheckOpportunities()
     ...
    End Sub
End Class
---------------------------------------------------------------------------------------
0

Featured Post

New benefit for Premium Members - Upgrade now!

Ready to get started with anonymous questions today? It's easy! Learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
Sometimes it takes a new vantage point, apart from our everyday security practices, to truly see our Active Directory (AD) vulnerabilities. We get used to implementing the same techniques and checking the same areas for a breach. This pattern can re…
Want to learn how to record your desktop screen without having to use an outside camera. Click on this video and learn how to use the cool google extension called "Screencastify"! Step 1: Open a new google tab Step 2: Go to the left hand upper corn…

715 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question