<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.eqqon.com/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.eqqon.com/index.php?action=history&amp;feed=atom&amp;title=Preventing_Recursive_Events</id>
		<title>Preventing Recursive Events - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://www.eqqon.com/index.php?action=history&amp;feed=atom&amp;title=Preventing_Recursive_Events"/>
		<link rel="alternate" type="text/html" href="http://www.eqqon.com/index.php?title=Preventing_Recursive_Events&amp;action=history"/>
		<updated>2026-04-26T17:36:24Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.16.0</generator>

	<entry>
		<id>http://www.eqqon.com/index.php?title=Preventing_Recursive_Events&amp;diff=449&amp;oldid=prev</id>
		<title>Henon at 22:53, 21 November 2007</title>
		<link rel="alternate" type="text/html" href="http://www.eqqon.com/index.php?title=Preventing_Recursive_Events&amp;diff=449&amp;oldid=prev"/>
				<updated>2007-11-21T22:53:37Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 22:53, 21 November 2007&lt;/td&gt;
		&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:CSharp]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:CSharp]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;div style = &amp;quot;margin-left:100px; margin-right:200px;&amp;quot;&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Preventing Recursive Events in C# =&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Preventing Recursive Events in C# =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 45:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 46:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;--[[User:Henon|Henon]] 23:45, 21 November 2007 (CET)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;--[[User:Henon|Henon]] 23:45, 21 November 2007 (CET)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/div&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wikidb_eqqon_pub:diff:version:1.11a:oldid:445:newid:449 --&gt;
&lt;/table&gt;</summary>
		<author><name>Henon</name></author>	</entry>

	<entry>
		<id>http://www.eqqon.com/index.php?title=Preventing_Recursive_Events&amp;diff=445&amp;oldid=prev</id>
		<title>Henon: /* Preventing Recursive Events in C# */</title>
		<link rel="alternate" type="text/html" href="http://www.eqqon.com/index.php?title=Preventing_Recursive_Events&amp;diff=445&amp;oldid=prev"/>
				<updated>2007-11-21T22:46:58Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Preventing Recursive Events in C#&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 22:46, 21 November 2007&lt;/td&gt;
		&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Category:CSharp]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Preventing Recursive Events in C# =&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= Preventing Recursive Events in C# =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wikidb_eqqon_pub:diff:version:1.11a:oldid:444:newid:445 --&gt;
&lt;/table&gt;</summary>
		<author><name>Henon</name></author>	</entry>

	<entry>
		<id>http://www.eqqon.com/index.php?title=Preventing_Recursive_Events&amp;diff=444&amp;oldid=prev</id>
		<title>Henon: /* EventLocker */</title>
		<link rel="alternate" type="text/html" href="http://www.eqqon.com/index.php?title=Preventing_Recursive_Events&amp;diff=444&amp;oldid=prev"/>
				<updated>2007-11-21T22:46:21Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;EventLocker&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 22:46, 21 November 2007&lt;/td&gt;
		&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 15:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 15:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== EventLocker ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== EventLocker ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;An elegant technical solution to the recursive event problem is &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;the &lt;/del&gt;EventLocker. It keeps a Hashtable of currently invoked (=locked) delegates and stops recursive invocations. The EventLocker keeps your classes clean of locking noise. However, you should only use it for potentially recursive event invocations because dynamically invoking a delegate is inherently slower than normal typesafe event invocation.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;An elegant technical solution to the recursive event problem is &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;my &lt;/ins&gt;EventLocker. It keeps a Hashtable of currently invoked (=locked) delegates and stops recursive invocations. The EventLocker keeps your classes clean of locking noise. However, you should only use it for potentially recursive event invocations because dynamically invoking a delegate is inherently slower than normal typesafe event invocation.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wikidb_eqqon_pub:diff:version:1.11a:oldid:443:newid:444 --&gt;
&lt;/table&gt;</summary>
		<author><name>Henon</name></author>	</entry>

	<entry>
		<id>http://www.eqqon.com/index.php?title=Preventing_Recursive_Events&amp;diff=443&amp;oldid=prev</id>
		<title>Henon: New page: = Preventing Recursive Events in C# =  Events that cause each other to be fired recursively are usually a problem when two classes need to sync data. In large programs these recursive call...</title>
		<link rel="alternate" type="text/html" href="http://www.eqqon.com/index.php?title=Preventing_Recursive_Events&amp;diff=443&amp;oldid=prev"/>
				<updated>2007-11-21T22:45:20Z</updated>
		
		<summary type="html">&lt;p&gt;New page: = Preventing Recursive Events in C# =  Events that cause each other to be fired recursively are usually a problem when two classes need to sync data. In large programs these recursive call...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Preventing Recursive Events in C# =&lt;br /&gt;
&lt;br /&gt;
Events that cause each other to be fired recursively are usually a problem when two classes need to sync data. In large programs these recursive call chains can be quite long and thus a recursion might not be expected when firing some event. The recursion ends in a StackOverflowException. There are many possibilities to resolve such a problem. The easiest one is to introduce a '''boolean locking field''' which prevents reentrancy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;MyEvent&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;!=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;null&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;m_MyEvent_lock&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;true&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;MyEvent&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;();&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;m_MyEvent_lock&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;false&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is fine unless you need to lock a lot of events and the locking fields are spamming your classes. Another way to cope with recursive events is the '''Mediator Pattern''' by [Gamma et al 95]. If there are a number of objects which need to keep data in sync they don't notify each other via events but notify a common mediator. The mediator then notifies the others and makes sure not to notify the object that has notified him. It is often the best with technical problems to rethink the design (i.e. apply the Mediator Pattern) but sometimes we just want an elegant technical solution.&lt;br /&gt;
&lt;br /&gt;
== EventLocker ==&lt;br /&gt;
An elegant technical solution to the recursive event problem is the EventLocker. It keeps a Hashtable of currently invoked (=locked) delegates and stops recursive invocations. The EventLocker keeps your classes clean of locking noise. However, you should only use it for potentially recursive event invocations because dynamically invoking a delegate is inherently slower than normal typesafe event invocation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;class&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;EventLocker&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;static&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;Hashtable&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;m_lock&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;static&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;EventLocker&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;m_lock&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;new&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;Hashtable&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;();&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;static&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;Invoke&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;Delegate&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;d&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;params&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;object&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;[]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;args&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;d&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;!=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;null&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;&amp;amp;amp;&amp;amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;!&amp;lt;/span&amp;gt;m_lock&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;ContainsKey&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;d&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;m_lock&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;Add&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;d&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;true&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;);&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;d&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;DynamicInvoke&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;args&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;);&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;m_lock&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;Remove&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;d&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;);&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;static&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;InvokeThreadsafe&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;Delegate&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;d&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;params&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;object&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;[]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;args&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S5&amp;quot;&amp;gt;lock&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;m_lock&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;Invoke&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;d&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;args&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;);&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S0&amp;quot;&amp;gt;&amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;S10&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[User:Henon|Henon]] 23:45, 21 November 2007 (CET)&lt;/div&gt;</summary>
		<author><name>Henon</name></author>	</entry>

	</feed>