3 Different Ways to Display Progress in an ASP.NET AJAX Application

Posted by: Suprotim Agarwal , on 11/10/2008, in Category ASP.NET AJAX
Views: 550716
Abstract: In this article, we will study three different techniques that allow you to visually display progress to users while performing partial-page updates using the UpdatePanel.
3 Different Ways to Display Progress in an ASP.NET AJAX Application
 
In this article, we will study three different techniques that allow you to visually display progress to users while performing partial-page updates using the UpdatePanel. For all the three approaches, I have used a .gif image to show a spinning gear kind of a progress bar while the UpdatePanel is performing some action. The image can be found with the source code for this article over here.
Method 1: Using PageRequestManager to display progress in an ASP.NET AJAX application
The PageRequestManager class handles the partial-page updates of the UpdatePanel. This class defines client events that you can use during an asynchronous request cycle. Let us see how to use some events of this class to display progress to the user while the UpdatePanel updates its contents.
Drag and drop a Button(btnInvoke) and Label(lblText) control inside the UpdatePanel. Also add a <div id="divImage" inside the UpdatePanel. This div will contain a .gif image that depicts progress and is initially set to invisible style="display:none". On the button click, perform a time consuming task. In our case, we have set a delay of 3 seconds by using Thread.Sleep(3000).  
C#
    protected void btnInvoke_Click(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(3000);
        lblText.Text = "Processing completed";
    }
VB.NET
      Protected Sub btnInvoke_Click(ByVal sender As Object, ByVal e As EventArgs)
            System.Threading.Thread.Sleep(3000)
            lblText.Text = "Processing completed"
      End Sub
The markup and code for this sample is as shown below:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UsingPageRequestManager.aspx.cs" Inherits="UsingCSS" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Display Progress Using PageRequestManager</title>  
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
         <script type="text/javascript">
             // Get the instance of PageRequestManager.
             var prm = Sys.WebForms.PageRequestManager.getInstance();
             // Add initializeRequest and endRequest
             prm.add_initializeRequest(prm_InitializeRequest);
             prm.add_endRequest(prm_EndRequest);
            
             // Called when async postback begins
             function prm_InitializeRequest(sender, args) {
                 // get the divImage and set it to visible
                 var panelProg = $get('divImage');                
                 panelProg.style.display = '';
                 // reset label text
                 var lbl = $get('<%= this.lblText.ClientID %>');
                 lbl.innerHTML = '';
 
                 // Disable button that caused a postback
                 $get(args._postBackElement.id).disabled = true;
             }
 
             // Called when async postback ends
             function prm_EndRequest(sender, args) {
                 // get the divImage and hide it again
                 var panelProg = $get('divImage');                
                 panelProg.style.display = 'none';
 
                 // Enable button that caused a postback
                 $get(sender._postBackSettings.sourceElement.id).disabled = false;
             }
         </script>
 
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:Label ID="lblText" runat="server" Text=""></asp:Label>
                <div id="divImage" style="display:none">
                     <asp:Image ID="img1" runat="server" ImageUrl="~/images/progress.gif" />
                     Processing...
                </div>                
                <br />
                <asp:Button ID="btnInvoke" runat="server" Text="Click"
                    onclick="btnInvoke_Click" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>
 
As shown in the code above, we first get a reference to the PageRequestManager and then wire up the initializeRequest and endRequest events to execute, when an async postback begins and ends respectively.
When the user initiates a postback by clicking on the button kept inside the UpdatePanel, we set a delay of 3 seconds. To display progress to the user, we handle the InitializeRequest at the client side and set the divImage to visible. This shows up the .gif image with the progress as shown below. The button that caused the postback is disabled during this event, so in order to prevent users from hitting the button again.
Progress Bar
Note: Remember that you cannot have simultaneous async postbacks using ASP.NET AJAX.
When the async postback completes (in our case when 3 seconds are over), the endRequest event gets fired. The divImage is set to invisible, there by hiding the gif image and the button is enabled again.
Method 2: Using the UpdateProgress control to display progress in an ASP.NET AJAX application
Another very simple option to display progress during an async postback is to use the UpdateProgress control. You can use this control to display status information to the user, while the UpdatePanel updates its content. In the example below, we use the same .gif to display progress while the UpdatePanel is updating its content. For understanding purposes, we have emulated a time consuming operation by setting a delay of 3 seconds by using Thread.Sleep(3000) on the button click.
 C#
    protected void btnInvoke_Click(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(3000);
        lblText.Text = "Processing completed";
    }
VB.NET
      Protected Sub btnInvoke_Click(ByVal sender As Object, ByVal e As EventArgs)
            System.Threading.Thread.Sleep(3000)
            lblText.Text = "Processing completed"
      End Sub
 
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UsingUpdateProgress.aspx.cs" Inherits="_Default" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdateProgress ID="updProgress"
        AssociatedUpdatePanelID="UpdatePanel1"
        runat="server">
            <ProgressTemplate>           
            <img alt="progress" src="images/progress.gif"/>
               Processing...           
            </ProgressTemplate>
        </asp:UpdateProgress>
       
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:Label ID="lblText" runat="server" Text=""></asp:Label>
                <br />
                <asp:Button ID="btnInvoke" runat="server" Text="Click"
                    onclick="btnInvoke_Click" />
            </ContentTemplate>
        </asp:UpdatePanel>        
    </div>
    </form>
</body>
</html>
 
In the code shown above, we use the AssociatedUpdatePanelID property of the UpdateProgress control to associate it with an UpdatePanel control. The ProgressTemplate property that can contain HTML, is used to specify the message displayed by an UpdateProgress control. In our case, we are displaying a .gif image progress as shown below
Progress
Method 3: Using UpdatePanelAnimationExtender to display progress in an ASP.NET AJAX application
The UpdatePanelAnimation control can also be used to visually display progress to the users while the UpdatePanel is performing some operation. As defined in the ASP.NET AJAX documentation “The UpdatePanelAnimationExtender is a simple extender that allows you to utilize the powerful animation framework with existing pages in an easy, declarative fashion. It is used to play animations both while an UpdatePanel is updating and after it has finished updating”. You can read more about the UpdatePanelAnimationExtender over here. For this sample to work, drag and drop a UpdatePanelAnimationExtender from the AJAX Toolkit on to your page.
<Animations> are declared in the UpdatePanelAnimationExtender to create animation effect. Within the <Animations>, you can define the sequence of effects for the UpdatePanelAnimation. You can even use <ScriptAction> definitions to fine-tune and customize the animation.
In this example, we will show how to display an image progress bar using the <ScriptAction> definition of the UpdatePanelAnimationExtender. In the example given below, we have defined two <ScriptAction>; one for while the UpdatePanel is updating(<OnUpdating>) and one for after the UpdatePanel has finished updating(<OnUpdated>).
The two <ScriptAction> definition tags call two JavaScript methods respectively that are responsible for displaying and hiding the image progress bar while the UpdatePanel performs an update on the control. As shown in the previous methods, we have emulated a time consuming operation by setting a delay of 3 seconds by using Thread.Sleep(3000) on the button click. You can replace this code with any time consuming operation, like fetching records from a remote database or performing any similar resource intensive operation. The technique of hiding and showing the image also remains the same as we had discussed in Method 1. The entire source code and mark up is as shown below:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UsingUpdatePanelAnimation.aspx.cs" Inherits="UpdPnlAnimation" %>
 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
 
        function onUpdating()
        {
            // get the divImage
            var panelProg = $get('divImage');
            // set it to visible
            panelProg.style.display = '';
 
            // hide label if visible     
            var lbl = $get('<%= this.lblText.ClientID %>');
            lbl.innerHTML = '';
        }
 
        function onUpdated()
        {
            // get the divImage
            var panelProg = $get('divImage');
            // set it to invisible
            panelProg.style.display = 'none';
        }
 
 
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:Label ID="lblText" runat="server" Text=""></asp:Label>
                <div id="divImage" style="display:none">
                     <asp:Image ID="img1" runat="server" ImageUrl="~/images/progress.gif" />
                     Processing...
                </div>               
                <br />
                <asp:Button ID="btnInvoke" runat="server" Text="Click"
                    onclick="btnInvoke_Click" />
            </ContentTemplate>
        </asp:UpdatePanel>
        <cc1:UpdatePanelAnimationExtender ID="UpdatePanelAnimationExtender1"
        TargetControlID="UpdatePanel1" runat="server">
        <Animations>
            <OnUpdating>
               <Parallel duration="0">
                    <ScriptAction Script="onUpdating();" />
                    <EnableAction AnimationTarget="btnInvoke" Enabled="false" />                   
                </Parallel>
            </OnUpdating>
            <OnUpdated>
                <Parallel duration="0">
                    <ScriptAction Script="onUpdated();" />
                    <EnableAction AnimationTarget="btnInvoke" Enabled="true" />
                </Parallel>
            </OnUpdated>
        </Animations>
        </cc1:UpdatePanelAnimationExtender>       
    </div>
    </form>
</body>
</html>
 
C#
    protected void btnInvoke_Click(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(3000);
        lblText.Text = "Processing completed";
    }
VB.NET
      Protected Sub btnInvoke_Click(ByVal sender As Object, ByVal e As EventArgs)
            System.Threading.Thread.Sleep(3000)
            lblText.Text = "Processing completed"
      End Sub
 
The progress will look similar to the ones shown in the other methods
progress
Well those were the three different methods of displaying progress to the user while the UpdatePanel updates its contents. The entire source code of this article can be downloaded from here (pwd:dotnetcurry123#). I hope this article was useful and I thank you for viewing it. 

This article has been editorially reviewed by Suprotim Agarwal.

Absolutely Awesome Book on C# and .NET

C# and .NET have been around for a very long time, but their constant growth means there’s always more to learn.

We at DotNetCurry are very excited to announce The Absolutely Awesome Book on C# and .NET. This is a 500 pages concise technical eBook available in PDF, ePub (iPad), and Mobi (Kindle).

Organized around concepts, this Book aims to provide a concise, yet solid foundation in C# and .NET, covering C# 6.0, C# 7.0 and .NET Core, with chapters on the latest .NET Core 3.0, .NET Standard and C# 8.0 (final release) too. Use these concepts to deepen your existing knowledge of C# and .NET, to have a solid grasp of the latest in C# and .NET OR to crack your next .NET Interview.

Click here to Explore the Table of Contents or Download Sample Chapters!

What Others Are Reading!
Was this article worth reading? Share it with fellow developers too. Thanks!
Share on LinkedIn
Share on Google+

Author
Suprotim Agarwal, MCSD, MCAD, MCDBA, MCSE, is the founder of DotNetCurry, DNC Magazine for Developers, SQLServerCurry and DevCurry. He has also authored a couple of books 51 Recipes using jQuery with ASP.NET Controls and The Absolutely Awesome jQuery CookBook.

Suprotim has received the prestigious Microsoft MVP award for Sixteen consecutive years. In a professional capacity, he is the CEO of A2Z Knowledge Visuals Pvt Ltd, a digital group that offers Digital Marketing and Branding services to businesses, both in a start-up and enterprise environment.

Get in touch with him on Twitter @suprotimagarwal or at LinkedIn



Page copy protected against web site content infringement 	by Copyscape




Feedback - Leave us some adulation, criticism and everything in between!
Comment posted by Simone on Monday, November 10, 2008 7:18 AM
I wrote a post with the second option:

How to make a Gmail-like loading indicator with ASP.NET Ajax
http://codeclimber.net.nz/archive/2007/05/17/How-to-make-a-Gmail-like-loading-indicator-with-ASP.NET-Ajax.aspx
Comment posted by kk18_b on Monday, November 10, 2008 10:53 PM
Very nice article. But, I am working on Master page, and there are 2 usercontrols in the Masterpage which uses 2 different update panels in each of them and if I click Retrieve button for one user control, I am getting the loading image for both of the usercontrols. Is there any other way to work with this kind of problem. Please update me..
Comment posted by Suprotim Agarwal on Tuesday, November 11, 2008 12:14 PM
Simone: Thanks for sharing your solution.

kk18_b: Hard to say without seeing some code. Use the Contact page and mail me your code.
Comment posted by kk18_b on Tuesday, November 11, 2008 6:07 PM
Thank you Suprotim Agarwal for your reply. I found the solution for my problem. I mailed you the code that I was having problem with and the code that I resolved.
One last question, as I am new to this website, is there any forums where we can discuss the problems?
Comment posted by Suprotim Agarwal on Wednesday, November 12, 2008 3:45 AM
kk18_b: Unfortunately No. But you can post your ASP.NET questions at
http://forums.asp.net
Comment posted by kk18_b on Wednesday, November 12, 2008 9:16 PM
Thank you
Comment posted by Pawan Kumar on Monday, November 24, 2008 7:15 AM
Unfortunately No. But you can post your ASP.NET questions at
http://dev.codeplatter.com
Comment posted by Thanigainathan.S on Monday, December 1, 2008 1:13 AM
Hi There ,

This article is really nice. I have a situation i open a pop up window . This is not model window . So in that case is that possible to show the image there ?

Thanks,
Thani
Comment posted by ;';;;';' on Monday, December 1, 2008 1:49 AM
;'
Comment posted by samuelanre on Monday, December 1, 2008 5:24 AM
very nice code segments; i have not really explored it in-depth.................
Comment posted by sa on Monday, December 1, 2008 2:44 PM
Wat if User Refreshes Page?
Comment posted by Stephen on Tuesday, December 2, 2008 3:38 AM
very insightfull post, but which method is the
A) Best in terms of speed, responsiveness and load on server
B) Do you recommend in terms of code maintainability and good development practice

Me thinks A, the pure JScript options is the most lightweight, It will however be a nigthmare to maintain. Your thoughts?

Comment posted by Mark Kamoski on Tuesday, December 2, 2008 1:49 PM
Regarding the Copy-Scape notice on this page, is it OK print a PDF of this document? Please advise. Thank you. -- Mark Kamoski
Comment posted by Mark Kamoski on Tuesday, December 2, 2008 1:51 PM
Nice article. I really appreciate it. The only suggestion that I will make is to somehow tweak the page layout a bit because the embedeed VS.NET ad-based video wreaks havoc on the page, bouncing around, etc, and the page in general does not print to PDF very well due to ads. Aside from that, it is great. Thank you. -- Mark Kamoski
Comment posted by Suprotim Agarwal on Tuesday, December 2, 2008 10:03 PM
Thanigainathan - Yes.

sa - Go ahead. Do you face issues?

Stephen - If it was speed and responsiveness, I would rather focus on the task that is being performed in the UpdatePanel and find means to speedup. The difference between the 3 approaches in terms of speed should not be much, although I have observed that the animation extender is a little slower than the other two.

Watch out for one of my forthcoming articles where I show a similar approach using jQuery!

Mark: Thanks. Yes you can print the article. Can you send me a screenshot using the 'Contact' page where the VS.NET ad spoils the page view. Also please mention the browser and version you are using.

Also, we will be providing the Print option very soon on the site. It's currently being tested.
Comment posted by Borik on Wednesday, December 3, 2008 11:23 AM
Unfortunately this is only a Binary Progress State, its eater working or done...

What would be cool is to have an intermediate indicators for ex: 10%, 20%, 30%, etc...  

protected void btnInvoke_Click(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(3000);
        lblText.Text = "10%";

        System.Threading.Thread.Sleep(3000);
        lblText.Text = "20%";
    }

Only way i got that to work was to set Value into Application Variable and Check and Update value from Client Side every 2 sec,
if any one has a better solution please share...
Comment posted by JOHN P PARLATO on Saturday, January 17, 2009 7:23 AM
I used the first way that you showed here and it worked great.  I want to thank you for doing such a great job of explaining this.  Thank you and to everyone like you that teach - you are a asset to our community.
Comment posted by Suprotim Agarwal on Thursday, January 22, 2009 12:00 PM
John: Thanks for your feedback. I appreciate it!
Comment posted by aruninnice on Wednesday, May 20, 2009 3:23 AM
thx for your code ... it works really.
Comment posted by senthil_msn on Tuesday, June 2, 2009 8:22 AM
great job
Comment posted by cx on Saturday, June 13, 2009 6:02 AM
cx
Comment posted by KLM on Friday, August 28, 2009 2:54 PM
I am using V2 to send a form that includes an attach file via fileupload control.  For some reason V2 is sending duplicate emails, in the first email the file is corrupt, in the second email the file is intact. Any ideas why this is happening? Thanks!!
Comment posted by KLM on Friday, August 28, 2009 3:43 PM
I got it, I was using Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click not  Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
Comment posted by Angeline on Wednesday, September 23, 2009 2:06 AM
Excellent article.. The solution resolved my problem. Thanx a lot...
Comment posted by Ram Thatikonda on Friday, May 14, 2010 4:41 PM
Where can I get the password for the zip file that I downloaded? I am a subscribed user but dont have the password.
Comment posted by Admin on Sunday, May 16, 2010 11:05 PM
there is no password for any of the files. Just Ctrl + F5 the page and download the file again.
Comment posted by AnnieX on Wednesday, June 23, 2010 6:07 AM
Hi. Love the code it works great but when i have 2 different update panels on a page and i click either button both images show at the same time. Is their away around this. All the best AnnieX.

        function onUpdating1() {
            var panelProg1 = $get('divImage1'); //get the divImage
            panelProg1.style.display = ''; //set it to visible
        }

        function onUpdated1() {
            var panelProg1 = $get('divImage1'); //get the divImage
            panelProg1.style.display = 'none'; //set it to invisible
        }

        ///btnAddZone1: These two functions are used when the btnAddZone1 button is clicked
        function onUpdating2() {
            var panelProg2 = $get('divImage2'); //get the divImage
            panelProg2.style.display = ''; //set it to visible
        }

        function onUpdated2() {
            var panelProg2 = $get('divImage2'); //get the divImage
            panelProg2.style.display = 'none'; //set it to invisible            
        }
    //-->
    </script>



<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
                        </asp:ToolkitScriptManager>

                        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                        <ContentTemplate>
                            
                            <div id="divImage1" style="display:none" class="NCT-H9-BK-B">
                                 <asp:Image ID="imgPleaseWait1" runat="server" ImageUrl="~/AppImages/PleaseWait.gif" ImageAlign="AbsMiddle" />
                                 Processing data...
                            </div>                
                            
                            <asp:Button ID="btnAddSlideDetails" runat="server" CSSClass="NCT-H9-BK" Width="300px" />&nbsp;
                            <asp:Button ID="btnViewSlide" runat="server" CSSClass="NCT-H9-BK" Width="202px" OnClientClick="window.open('tpText01_1Col.aspx')" />
                        </ContentTemplate>
                    </asp:UpdatePanel>
                    <asp:UpdatePanelAnimationExtender ID="UpdatePanelAnimationExtender1"
                    TargetControlID="UpdatePanel1" runat="server">
                    <Animations>
                        <OnUpdating>
                           <Parallel duration="0">
                                <ScriptAction Script="onUpdating1();" />
                                <EnableAction AnimationTarget="btnAddSlideDetails" Enabled="false" />                    
                            </Parallel>
                        </OnUpdating>
                        <OnUpdated>
                            <Parallel duration="0">
                                <ScriptAction Script="onUpdated1();" />
                                <EnableAction AnimationTarget="btnAddSlideDetails" Enabled="true" />
                            </Parallel>
                        </OnUpdated>
                    </Animations>
                    </asp:UpdatePanelAnimationExtender>


<asp:UpdatePanel ID="UpdatePanel2" runat="server">
                        <ContentTemplate>
                            
                            <div id="divImage2" style="display:none" class="NCT-H9-BK-B">
                                 <asp:Image ID="imgPleaseWait2" runat="server" ImageUrl="~/AppImages/PleaseWait.gif" ImageAlign="AbsMiddle" />
                                 Processing data...
                            </div>                
                            
                            <asp:Button ID="btnAddZone1" runat="server" CSSClass="NCT-H9-BK" Width="200px" />&nbsp;
                            <asp:Button ID="btnDeleteZone1" runat="server" CssClass="NCT-H9-BK" Width="200px" />
                        </ContentTemplate>
                    </asp:UpdatePanel>
                    <asp:UpdatePanelAnimationExtender ID="UpdatePanelAnimationExtender2"
                    TargetControlID="UpdatePanel2" runat="server">
                    <Animations>
                        <OnUpdating>
                           <Parallel duration="0">
                                <ScriptAction Script="onUpdating2();" />
                                <EnableAction AnimationTarget="btnAddZone1" Enabled="false" />                    
                            </Parallel>
                        </OnUpdating>
                        <OnUpdated>
                            <Parallel duration="0">
                                <ScriptAction Script="onUpdated2();" />
                                <EnableAction AnimationTarget="btnAddZone1" Enabled="true" />
                            </Parallel>
                        </OnUpdated>
                    </Animations>
                    </asp:UpdatePanelAnimationExtender>    


Comment posted by KLM on Saturday, September 4, 2010 7:14 PM
I am getting an error in IE7/8 (what else is new) on this line: lbl.innerHTML = '';.  IE says that it is NULL, how do I fix this?  THANKS!
Comment posted by Ashish Pandey on Wednesday, January 4, 2012 8:04 AM
Very informative post. Its really helpful for me and beginner too. Check out this link too its also having a nice post with wonderful explanation on Ajax Toolkit Update Progress Control in ASP.Net...

http://mindstick.com/Articles/55813e1c-8f3a-46ad-8469-60857607da2c/?Ajax%20Toolkit%20Update%20Progress%20Control%20in%20ASP.Net

Thanks

Comment posted by Amirhossein on Tuesday, February 14, 2012 9:59 AM
How can we handle when the updatepanel fails to update?
Comment posted by cprogrammings on Monday, April 2, 2012 1:12 AM
Nice article. I really appreciate it. but i should be in popup it's look good..like to see follow link    http://www.cprogrammings.com/result/How-to-show-the-progressbar-during-Postback-in-Asp.net/60.html
Comment posted by newProgrammer on Wednesday, May 2, 2012 1:47 AM
none of them are working....
Comment posted by Arjun on Saturday, May 19, 2012 8:31 AM
I think the following link is much easier for freshers........(my opinion)

http://yash-maneel.blogspot.in/2012/05/show-processing-image-when-click-on.html
Comment posted by Samir Rana on Saturday, June 2, 2012 10:52 PM
Ultimate post. Really Helpful and working demo...
Comment posted by Shivaraj Kamadod on Saturday, October 13, 2012 4:51 AM
Thank u for the article this one helps a lot to me...
Comment posted by Shivaraj Kamadod on Saturday, October 13, 2012 4:56 AM
I have one question sir... in my project i am using updatepanel. but some times controles in the update panel will not work properly or they get disappear, after refreshing its work properly. what will be the problem.
Comment posted by dip on Thursday, October 18, 2012 4:52 AM
First method worked like a charm for me. I just copied and pasted the code in master page.

Thanks!!!
Comment posted by Dorababu on Tuesday, November 6, 2012 6:11 AM
With out using thread.Sleep can we do this waiting scenario
Comment posted by Isa on Monday, June 3, 2013 1:02 PM
Good article, it was helpful :)
Comment posted by yash on Friday, July 5, 2013 2:08 AM
Try this

http://yash-maneel.blogspot.in/2012/05/show-processing-image-when-click-on.html
Comment posted by Newman on Friday, September 6, 2013 4:55 AM
The Kettic's Track and Status controls for Windows Forms can create interactive and attractive user interfaces and build the progress bar, scroll elements, track bar, and waiting bar, etc. for their Windows Forms applications.
http://www.kettic.com/winforms_ui/track_status.shtml
Comment posted by asdfsdf on Wednesday, September 18, 2013 9:59 AM
So you are going to force us to subscribe?
Comment posted by Michele on Friday, October 4, 2013 4:20 AM
Thanks!!!
Comment posted by Carlos Arias on Wednesday, October 16, 2013 1:28 PM
tks a lot
Comment posted by Abhishek Pandey on Friday, November 22, 2013 3:43 AM
i am using jqury validation it is working but i want to show the error message in list view as --
*enter user name//error message.
*enter password // error message
how I manage this thing.
Comment posted by qaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa on Wednesday, March 19, 2014 9:49 AM
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Comment posted by riyanmarge on Saturday, April 19, 2014 12:52 AM
a simple prgressbar...http://asp.net-informations.com/ajax/ajax-database.htm

riyan
Comment posted by Ali on Thursday, July 3, 2014 9:54 AM
I get this error for the first two options... what am I missing?

Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed.

Thanks.

Ali
Comment posted by ggggggggggggggggg on Thursday, July 31, 2014 7:00 AM
zzzzzzzzzzzzzzzzzzz
Comment posted by Logan King on Thursday, July 31, 2014 1:22 PM
When I click on the link to download the source code for these examples I am taken to all of your examples.  I cannot find the source code for these examples. Would you please supply it?
Thanks,
Logan
Comment posted by Suprotim Agarwal on Friday, August 1, 2014 8:53 AM
@Logan: Very strange! Download the one that says AjaxProgress.
Comment posted by Bharath on Tuesday, November 18, 2014 2:14 AM
Thank you so much...
Comment posted by sdf on Monday, April 20, 2015 1:07 AM
fdfdf
Comment posted by sharmila on Monday, May 4, 2015 8:12 AM
this 3 ways are not work for project i just try to want  display the progress bar until fetch the value from anywhere whether it s data base or anything