using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Threading;
namespace AsyncProgramDemo
{
public class AsyncComponentSample : Component
{
public event Action<object, BreakEventArgs> Break;
public event Action<object, DebugCompltedEventArgs> Completed;
public void StartDebug()
{
AsyncOperation asyncOp = AsyncOperationManager.CreateOperation(1);
Action<AsyncOperation> exec = new Action<AsyncOperation>(Execute);
exec.BeginInvoke(asyncOp, null, null);
}
private void Execute(AsyncOperation asyncOp)
{
Thread.Sleep(1000);
SendOrPostCallback callback = new SendOrPostCallback(Callback);
asyncOp.Post(callback, 7);
Thread.Sleep(1000);
SendOrPostCallback completedCallback = new SendOrPostCallback(CompltedCallback);
asyncOp.PostOperationCompleted(completedCallback, "completed");
}
private void Callback(object lineNumber)
{
if (Break != null)
{
Break(this, new BreakEventArgs((int)lineNumber));
}
}
private void CompltedCallback(object msg)
{
if (Completed != null)
{
Completed(this, new DebugCompltedEventArgs(msg.ToString()));
}
}
}
public class BreakEventArgs : EventArgs
{
public int LineNumber;
public BreakEventArgs(int lineNumber)
{
this.LineNumber = lineNumber;
}
}
public class DebugCompltedEventArgs : AsyncCompletedEventArgs
{
public string Msg;
public DebugCompltedEventArgs(string msg) : base(null, false, null)
{
this.Msg = msg;
}
}
}