private readonly object _sync= new object(); public IAsyncResult BeginInvoke(Delegate method, object[] args) { var result = new SimpleAsyncResult(); ThreadPool.QueueUserWorkItem( delegate { result.AsyncWaitHandle = new ManualResetEvent(false); try { result.AsyncState = Invoke(method, args); } catch (Exception exception) { Debug.WriteLine(exception.Message); Debug.WriteLine(exception.StackTrace); result.Exception = exception; } result.IsCompleted = true; }); return result; } public object EndInvoke(IAsyncResult result) { if (!result.IsCompleted) { result.AsyncWaitHandle.WaitOne(); } return result.AsyncState; } public object Invoke(Delegate method, object[] args) { lock (_sync) { return method.DynamicInvoke(args); } } public bool InvokeRequired { get { return true; } } public class SimpleAsyncResult : IAsyncResult { private object _state; public bool IsCompleted { get; set; } public WaitHandle AsyncWaitHandle { get; internal set; } public object AsyncState { get { if (Exception != null) { throw Exception; } return _state; } internal set { _state = value; } } public bool CompletedSynchronously { get { return IsCompleted; } } internal Exception Exception { get; set; } }Want to read more?
Monday, September 9, 2013
ISynchronizeInvoke implementation example
Put the following code for classes you want to implement ISynchronizeInvoke should do the job
Subscribe to:
Post Comments (Atom)
Are you looking to make cash from your websites by running popup ads?
ReplyDeleteIf so, did you know about Propeller Ads?