Solved

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

Posted on 2003-11-03
5
1,985 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
  • 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 500 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

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

IP addresses can be stored in a database in any of several ways.  These ways may vary based on the volume of the data.  I was dealing with quite a large amount of data for user authentication purpose, and needed a way to minimize the storage.   …
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

760 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

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now