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

New Message on MumbaiUserGroup

-----------------------------------------------------------
From: Nasha
Message 1 in Discussion

 
Hey Group,

Yesterday we saw how we can communicate with web services using callbacks. 
Today we will discuss the other two techniques  Polling and Waithandles.
   Polling : 
When we made a call to our web service using callback we passed it reference to 
our fucntion and in return we get an IAsyncResult  object back which acted as a 
token.

In case of polling we will again call BeginCoSine method but not pass any 
parameter for callback. This method will return us an  IAsyncResult object. 
Polling works on one of the properties of this object called IsCompleted. After 
calling the method we will have to  continuous POLL for the value of this 
property. When the webservice is completed with its processing the value 
IAsyncResult object  will be set to true.After that we call the EndCoSine 
function passing it our IAsyncResult object (which acts as a token) to retrieve 
our  result.

Add another button to your windows form and put in the below code :

                private void button3_Click(object sender, System.EventArgs e)
                {
                        int noOfSec = 0;
                        oIAsyncResult = trigoService.BeginCoSine(90,null,null);
                        while(oIAsyncResult.IsCompleted == false)
                        {
                                noOfSec++;
                                Thread.Sleep(1000);
                        }
                        MessageBox.Show("Completed in " + noOfSec);
                        label1.Text =  
Convert.ToString(trigoService.EndCoSine(oIAsyncResult));
                }


Here we are checking out the value of IsCompleted property in a while loop. 
After the value is set to true we message the number of  seconds that were 
taken to POLL. Finally we call EndCosine function passing our IAsyncResult 
object.
 
WaitHandles : 
This method also uses one of the properties of IAsyncResult object called 
AsyncWaitHandle.

This approach is generally used when u dont want to leave the thread in which 
you are communicating with the webservice. Thus in  this case you will wait for 
the webservice to complete its work without releasing the thread in which you 
were communicating. You can achieve this by using the WaitHandle returned by 
AsyncWaitHandle property of IAsyncResult object.

After you have called the BeginCosine method and got your IAsyncResult Token 
object you can use its AsyncWaitHandle property to  get WaitHandle object then 
use its WaitOne method to wait for the thread. WaitOne has multiple overloads 
some also take the  amount of time you want to wait.

Add another button to your windows form and add the following code snippet

                private void button4_Click(object sender, System.EventArgs e)
                {
                        int noOfSec = 0;
                        oIAsyncResult = trigoService.BeginCoSine(90,null,null);
                        oIAsyncResult.AsyncWaitHandle.WaitOne();
                        while(noOfSec++ < 5)
                        {
                                noOfSec++;
                                Thread.Sleep(1000);                            
                        }
                        MessageBox.Show("Waited for " + noOfSec);               
       
                        label1.Text =  
Convert.ToString(trigoService.EndCoSine(oIAsyncResult));        
                }

You can also checkout the other static methods of the WaitHandle object like 
WaitAll and WaitAny. These methods are particularly  used when you have 
multiple web service calls and you want to wait for either ALL of them to 
complete their processing and then  move ahead or with ANY ONE of them to 
complete their processing and then move ahead.

WAIT ALL :- Wait for all the web services to complete processing.
WAIT ANY:- Wait for any one of them to complete processing.
 
  
-- Please post your queries and comments for my articles in the usergroup for 
the benefit of all. I hope this step from my end is helpful to all of us. 
Regards, 
Namratha (Nasha)

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

To stop getting this e-mail, or change how often it arrives, go to your E-mail 
Settings.
http://groups.msn.com/MumbaiUserGroup/_emailsettings.msnw

Need help? If you've forgotten your password, please go to Passport Member 
Services.
http://groups.msn.com/_passportredir.msnw?ppmprop=help

For other questions or feedback, go to our Contact Us page.
http://groups.msn.com/contact

If you do not want to receive future e-mail from this MSN group, or if you 
received this message by mistake, please click the "Remove" link below. On the 
pre-addressed e-mail message that opens, simply click "Send". Your e-mail 
address will be deleted from this group's mailing list.
mailto:[EMAIL PROTECTED]

Reply via email to