Subscribing to an event for the duration of a using block
<p>I often come across the following code:</p>

<pre><code>myService.SomeEvent += listener;
myService.DoSomething();
myService.SomeEvent -= listener;
</code></pre>

<p>This is great, but it'd be nice if we could do this in a nicer way.  I was thinking of doing something like:</p>

<pre><code>using(EventScope.Start(myService.SomeEvent, listener)){
    myService.DoSomething();
}
</code></pre>

<p>Unfortunately this is prohibited by C# because myService.SomeEvent can only appear on the left hand side of a += or a -= (for good reason).  My question is what other options do I have?  Ideally I'd like this to be type safe, which rules out reflection and doing the following (which I've already implemented):</p>

<pre><code>using(EventScope.Start(myService, "SomeEvent", listener){
    myService.DoSomething();
}
</code></pre>

<p>To be clear I'm not married to using the 'using' syntax, and arguable you could say that it's a perversion of the language.  Other options would be appreciated!</p>
