お手軽非同期
/// <summary> /// お手軽非同期 /// </summary> public class EasyAsync { /// <summary> /// 終了イベント /// </summary> static public event EventHandler Finished; /// <summary> /// 開始イベント /// </summary> static public event EventHandler Starting; /// <summary> /// 指定されたメソッドを非同期で実行します。 /// </summary> /// <param name="invoker">実行対象メソッド。</param> /// <param name="key">メソッドを特定するためのキー。</param> static public void AsyncExecute( MethodInvoker invoker, int key ) { EasyAsync a = new EasyAsync( invoker, key ); a.Execute(); } private readonly MethodInvoker _invoker; private readonly int _key; /// <summary> /// キー。 /// </summary> public int Key { get { return _key; } } EasyAsync( MethodInvoker invoker, int key ) { _invoker = invoker; _key = key; } void Execute() { OnStarting(); _invoker.BeginInvoke( Callback, null ); } void Callback( IAsyncResult result ) { _invoker.EndInvoke( result ); OnFinished(); } protected virtual void OnStarting() { if (Starting != null) { Starting( this, EventArgs.Empty ); } } protected virtual void OnFinished() { if (Finished != null) { Finished( this, EventArgs.Empty ); } } }
usage
EasyAsync.Starting += Async_Starting; EasyAsync.Finished += Async_Finished; EasyAsync.AsyncExecute( delegate { /*ここに非同期処理を書く*/ }, 0 );