<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ASP.NET WebForms</title><link>https://www.dotnetzone.gr:443/cs/forums/13/ShowForum.aspx</link><description>Θέματα για web εφαρμογές, σε ASP.NET WebForms</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: ASP.NET console program execution asynchronously</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9079.aspx</link><pubDate>Tue, 31 Jan 2006 22:40:23 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9079</guid><dc:creator>anjelinio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9079.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=13&amp;PostID=9079</wfw:commentRss><description>&lt;P&gt;Ένα πεντάλεπτο παράδειγμα ασύγχρονης σελίδας. Μια σελίδα, ξεκινάει ασύγχρονα μια διαδικασία, η οποία τρέχει στο background και κάνει .. κάτι. Η σελίδα&amp;nbsp; κάνει κάθε 15 δεύτερα refresh, και δείχνει αν έχει τελειώσει&amp;nbsp; η διαδικασία στο background. Όταν με το καλό τελειώσει, δείχνει το αποτέλεσμα της διαδικασίας. &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Τα βασικά πρώτα. Η κλάσση η οποία υλοποιεί την όποια διαδικασία:&lt;/P&gt;
&lt;P&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;class&lt;/span&gt; AsyncOperation&lt;br /&gt;{&lt;br /&gt;      &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;const&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt; DURATION &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; (1000 &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;*&lt;/span&gt; 25);&lt;br /&gt;&lt;br /&gt;      &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; AsyncOperation()&lt;br /&gt;      {&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; DoSomething(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;object&lt;/span&gt; data) {&lt;br /&gt;             Thread.Sleep(DURATION);&lt;br /&gt;             &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"finished"&lt;/span&gt;;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;delegate&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; AsyncHandler(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;object&lt;/span&gt; data);&lt;br /&gt;}&lt;/span&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Το όλο μυστικό είναι ο delegate, με το ίδιο footprint με τη μέθοδο που θέλουμε να εκτελεστεί ασύγχρονα. Το framework θα κάνει τα απαραίτητα, έτσι ώστε να μπορέσουμε μέσω του delegate να χρησιμοποιήσουμε τη μέθοδο DoSomething ασύγχρονα ... &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Και μετά η σελίδα που την χρησιμοποιεί ασύγχρονα:&lt;/P&gt;
&lt;P&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;class&lt;/span&gt; AsyncForm : System.Web.UI.Page&lt;br /&gt; {&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;const&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; SESS_PARAM_OPERATION &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"__asyncOperation"&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;const&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; SESS_PARAM_RESULT           &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"__asyncResult"&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;const&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; SESS_PARAM_DELEGATE         &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"__asyncDelegate"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;protected&lt;/span&gt; AsyncOperation Operation {&lt;br /&gt;               get {&lt;br /&gt;                     &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; (AsyncOperation)Session[SESS_PARAM_OPERATION];&lt;br /&gt;               }&lt;br /&gt;               set {&lt;br /&gt;                     Session[SESS_PARAM_OPERATION] &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; value;&lt;br /&gt;               }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;protected&lt;/span&gt; AsyncOperation.AsyncHandler DelegateHandler {&lt;br /&gt;               get {&lt;br /&gt;                     &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; (AsyncOperation.AsyncHandler)Session[SESS_PARAM_DELEGATE];&lt;br /&gt;               }&lt;br /&gt;               set {&lt;br /&gt;                     Session[SESS_PARAM_DELEGATE] &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; value;&lt;br /&gt;               }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;protected&lt;/span&gt; IAsyncResult OperationResult {&lt;br /&gt;               get {&lt;br /&gt;                     &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;null&lt;/span&gt;==Session[SESS_PARAM_RESULT] &amp;amp;&amp;amp; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;null&lt;/span&gt;!=&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.Operation){&lt;br /&gt;                            &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.DelegateHandler &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; AsyncOperation.AsyncHandler(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.Operation.DoSomething);&lt;br /&gt;&lt;br /&gt;                            Session[SESS_PARAM_RESULT] &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.DelegateHandler.BeginInvoke(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"test data"&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;null&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;null&lt;/span&gt;);&lt;br /&gt;                     }&lt;br /&gt;&lt;br /&gt;                     &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; (IAsyncResult)Session[SESS_PARAM_RESULT];&lt;br /&gt;               }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;bool&lt;/span&gt; KeepPolling {&lt;br /&gt;               get {&lt;br /&gt;                     &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;null&lt;/span&gt;==Session[&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"poll"&lt;/span&gt;])&lt;br /&gt;                            Session[&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"poll"&lt;/span&gt;] &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;                     &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;bool&lt;/span&gt;)Session[&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"poll"&lt;/span&gt;];&lt;br /&gt;               }&lt;br /&gt;               set {&lt;br /&gt;                     Session[&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"poll"&lt;/span&gt;] &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; value;&lt;br /&gt;               }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;object&lt;/span&gt; sender, System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;               &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;// Check we've started the operation yet .. &lt;/span&gt;&lt;br /&gt;               &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;null&lt;/span&gt;==Operation){&lt;br /&gt;                     Operation &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; AsyncOperation();&lt;br /&gt;                     &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.KeepPolling &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;true&lt;/span&gt;;&lt;br /&gt;                     &lt;br /&gt;                     Response.Write(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"Started AsyncOperation"&lt;/span&gt;);&lt;br /&gt;               }&lt;br /&gt;               &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;else&lt;/span&gt; &lt;br /&gt;               &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.KeepPolling)&lt;br /&gt;               {&lt;br /&gt;                     &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;bool&lt;/span&gt; isComplete &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.OperationResult.IsCompleted;&lt;br /&gt;                     &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt;(!isComplete)&lt;br /&gt;                            Response.Write(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"Processing"&lt;/span&gt;); &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;// Poll the result ... &lt;/span&gt;&lt;br /&gt;                     &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;else&lt;/span&gt; {&lt;br /&gt;                            &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; result &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.DelegateHandler.EndInvoke(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.OperationResult);&lt;br /&gt;                            &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.KeepPolling &lt;span style="color: Red;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;false&lt;/span&gt;;&lt;br /&gt;                            Response.Write(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #666666;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;"Result: {0}"&lt;/span&gt;, result)); &lt;br /&gt;                     }&lt;br /&gt;               }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;#region&lt;/span&gt; Web Form Designer generated code&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;void&lt;/span&gt; OnInit(EventArgs e)&lt;br /&gt;        {&lt;br /&gt;               &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;//&lt;/span&gt;&lt;br /&gt;               &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;// CODEGEN: This call is required by the ASP.NET Web Form Designer.&lt;/span&gt;&lt;br /&gt;               &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;//&lt;/span&gt;&lt;br /&gt;               InitializeComponent();&lt;br /&gt;               &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;base&lt;/span&gt;.OnInit(e);&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;/// Required method for Designer support - do not modify&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;/// the contents of this method with the code editor.&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: Green;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;void&lt;/span&gt; InitializeComponent()&lt;br /&gt;        {    &lt;br /&gt;               &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.Load += &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; System.EventHandler(&lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;this&lt;/span&gt;.Page_Load);&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Lucida Console;font-size: 11px;font-weight: normal;"&gt;#endregion&lt;/span&gt;&lt;br /&gt; }&lt;/span&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Λοιπόν, εδώ τώρα είναι το ζουμί. Βασικά η διαδικασία δεν είναι και πολύ πολύπλοκη. Δημιουργούμε ένα νέο instance του delegate, του οποίου η BeginInvoke μας επιστρέφει ένα IAsyncResult object. Αυτό ενημερώνεται όταν τελειώσει η ασύγχρονη εκτέλεση,&amp;nbsp; οπότε πλέον καλούμε την EndInvoke για να πάρουμε το αποτέλεσμα.&amp;nbsp; Το&amp;nbsp; "όποιο" μυστικό είναι να κρατάς αυτά τα instances στο Session, στην Cache, κάπου τέλος πάντων, έτσι ώστε να είσαι οκ. Δεν μπορείς να τα δημιουργείς κάθε φορά.&lt;BR&gt;&lt;BR&gt;Επίσης, είναι σημαντικό να κρατάς και κάπου ένα flag για το αν καλέστηκε η&amp;nbsp; EndInvoke, γιατί αν καλεστεί δεύτερη φορά θα πάρεις exception πίσω.&lt;BR&gt;Α! Στο HTML της σελίδας, έχω ένα META REFRESH tag για να κάνει refresh κάθε 15 δεύτερα. Θα δείτε στον κώδικα ότι η ασύγρχονη δαιδικασία τελειώσει σε 25, έτσι ώστε να δεί κανείς όταν το τρέξει και τις τρείς φάσεις (started, processing, results). &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Ελπίζω να ήταν ενδιαφέρον, αν όχι χρήσιμο, το παραδειγματάκι ;]&lt;BR&gt;&lt;BR&gt;Happy async coding ! :)&lt;BR&gt;&lt;BR&gt;Υ.Γ. .. συνημμένο το project !&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: ASP.NET console program execution asynchronously</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9058.aspx</link><pubDate>Tue, 31 Jan 2006 19:17:29 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9058</guid><dc:creator>dimkasta</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9058.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=13&amp;PostID=9058</wfw:commentRss><description>Έχω βρει μια άκρη με asynchronous handler κλπ αλλά είχα τρέξιμο με άλλα και δεν το προχώρισα.&lt;br&gt;Όταν κάνω κάτι θα ποστάρω πως γίνεται.</description></item><item><title>Απ: ASP.NET console program execution asynchronously</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/9036.aspx</link><pubDate>Tue, 31 Jan 2006 02:18:22 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:9036</guid><dc:creator>anjelinio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/9036.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=13&amp;PostID=9036</wfw:commentRss><description>Πολύ γρήγορα, νομίζω οτι έχεις τις κάτωθι επιλογές:
&lt;br&gt;
&lt;br&gt;1. Win Service
&lt;br&gt;2. RPC / Remoting
&lt;br&gt;
&lt;br&gt;Η πρώτη επιλογή είναι λίγο πιο εύκολη, αλλά δεν υπάρχει εύκολος τρόπος να μιλάς με ένα σχετικά meaningful way σε ένα windows service. Μπορείς μόνο να του περνάς μια παράμετρο ( τύπου int κιόλας αν δε με γελάει η μνήμη μου ... ) σε μια και μοναδική μέθοδο που κάνει expose το API.
&lt;br&gt;
&lt;br&gt;Η δεύτερη είναι λίγο πιο δύσκολη, κυρίως επειδή θα πρέπει να γράψεις ένα τύποις server console app που θα ξεκινάει remoting listeners, στον εκάστοτε απο τους οποίους θα κάνεις ότι κάνεις τώρα στο console app σου. Αλλά έτσι έχεις 2 σημαντικά κατα τη γνώμη μου πράγματα ... 
&lt;br&gt;
&lt;br&gt;α) Αληθινά async execution
&lt;br&gt;β) Ένα σοβαρό API, το οπόιο εσυ δημιουργείς όπως σε βολεύει. Μιλάς στο object, σαν να μίλαγες σε ένα object μέσα στην εφαρμογή σου. Επίσης, έτσι θα μπορέσεις πιο εύκολα να πάρεις κάποιο status απο αυτό. 
&lt;br&gt;
&lt;br&gt;Αν δεν κάνω λάθος, υπάρχει ένα IAsyncHandler interface ορισμένο στο framework, που ίσως σε βοηθήσει στην υλοποίηση της σελίδας σου, αν και δεν είναι και πολύ δύσκολο να κάνεις τη σελίδα σου κανονική, αρκεί να περνάς κάποιο identifier του background process σου μεταξύ διαδοχικών κλήσεων στη σελίδα.
&lt;br&gt;
&lt;br&gt;Ελπίζω να μην ήταν πολύ συνοπτικά και πολύ μπερδεμένα όλα αυτα, και να βοήθησα λίγο.</description></item><item><title>ASP.NET console program execution asynchronously</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/8954.aspx</link><pubDate>Thu, 26 Jan 2006 20:04:58 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:8954</guid><dc:creator>dimkasta</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/8954.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=13&amp;PostID=8954</wfw:commentRss><description>Αυτό που θέλω να κάνω είναι αρκετά περίεργο (για μένα τουλάχιστον).&lt;br&gt;&lt;br&gt;Έχω μια σελίδα, από την οποία θέλω να ξεκινάω εκτέλεση ενός προγράμματος κονσόλας, επίσης γραμμένου σε .NET, το οποίο εκτελεί κάπου 1000 διαδοχικές ενέργεις που κρατάνε μερικές ώρες.&lt;br&gt;&lt;br&gt;1η απορία μου είναι ποιός είναι ο ενδεδειγμένος τρόπος για να καλέσω το πρόγραμμα?&lt;br&gt;Προς το παρόν χρησιμοποιώ το AppDomain. Υπάρχει κάποιος τρόπος να διαβάσω το output και το error της κονσόλας?&lt;br&gt;&lt;br&gt;2η απορία&lt;br&gt;Θέλω να κάνω τη σελίδα να εκτελείται asynchronously, έτσι ώστε να παίρνει κατευθείαν ο χρήστης τη σελίδα χωρίς να περιμένει, αλλά και για να μην ξεκινάει πολλές φορές τη διαδικασία. Επίσης θέλω να κάνω redirect σε μια άλλη που να δείχνει την πορεία του προγράμματος, αν τρέχει ή όχι και διάφορα στατιστικά από τη βάση. &lt;br&gt;&lt;br&gt;Μπορείτε να με κατευθύνετε λιγάκι γιατί άρχισα διάβασμα στο msdn και χάθηκα?&lt;br&gt;&lt;br&gt;Ευχαριστώ εκ των προτέρων.&lt;br&gt;</description></item></channel></rss>