I have web forms application. On one form I have a few functions. Which are called syncronously and takes some time. So I need to call them in different threads.
Thi
If you want to execute functions asynchronously, you need some steps to do:
1). you need to set Async="true" page directive.
<%@ Page Language="C#" Async="true" ... %>
2). You need to create PageAsyncTask object and register it using Page.RegisterAsyncTask() function.
RegisterAsyncTask function registers your function in syncronization context so ASP.NET will run your function asynchronously and also waits for all registered function to complete and then continues page processing.
You start new threads but don't wait for them to complete. Hence your page_load runs to completion since thread.start() is non blocking.
Have a look at async/wait in the latest .NET version. It makes things a lot easier and predictable
Nothing is waiting for your threads to complete before the page is rendered and returned - that's what's wrong.
To the end of your Page_Load()
function (or at the latest-possible point in the page rendering lifecycle), add:
t1.Join();
t2.Join();
Additionally: you should not update lbl1 and lbl2 within the thread proc - you should store the result(s) in variables and reflect the calculated values in the main rendering thread (i.e. once Join
has returned).
Edit: Although this fixes the problem in the question, have a look at PageAsyncTask as recommended by Vano's answer.