开发者

SynchronizingObject for an event

With Timer objects, I can s开发者_运维技巧et the SynchronizingObject property to avoid having to use invoke when updating the GUI from the timer's event handler. If I have a class that instead subscribes to an event and has to update the GUI in the event handler, is there an analogous concept? Or do I have to write the InvokeRequired boilerplate code?


SynchronizingObject is just an ISynchronizeInvoke property. (That interface is implemented by WinForms controls, for example.)

You can use the same interface yourself, although with a vanilla event there's nowhere to really specify the synchronization object.

What you could do is write a utility method which takes a delegate and an ISynchronizeInvoke, and returns a delegate which makes sure the original delegate is run on the right thread.

For example:

public static EventHandler<T> Wrap<T>(EventHandler<T> original,
    ISynchronizeInvoke synchronizingObject) where T : EventArgs
{
    return (object sender, T args) =>
    {
        if (synchronizingObject.InvokeRequired)
        {
            synchronizingObject.Invoke(original, new object[] { sender, args });
        }
        else
        {
            original(sender, args);
        }
    };
}


You may take a look at the BackgroundWorker class.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜