<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Блогът на Stefoo</title>
	<atom:link href="http://stefoo.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://stefoo.wordpress.com</link>
	<description>Development блог. Oracle, Java, C# и други</description>
	<lastBuildDate>Fri, 25 Apr 2008 10:00:35 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>bg</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='stefoo.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/73a74bd8a88e2ce56993a16cf05b20b2?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Блогът на Stefoo</title>
		<link>http://stefoo.wordpress.com</link>
	</image>
			<item>
		<title>Инициране на Събития(events) чрез Reflection в C#</title>
		<link>http://stefoo.wordpress.com/2008/04/25/reflection_events/</link>
		<comments>http://stefoo.wordpress.com/2008/04/25/reflection_events/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 08:40:59 +0000</pubDate>
		<dc:creator>stefoo</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[reflection]]></category>

		<guid isPermaLink="false">http://stefoo.wordpress.com/?p=5</guid>
		<description><![CDATA[Разработвайки проект, който използва много събития, ми се стори доста досадно за всяко едно събитие да се пише специален метод за актовиране. Като допълнително затруднение се появи и условието всеки метод, който се абонира за събитието, да се извиква индивидуално, т.е. да се използва InvocationList-а на събитието. Ето моето решение на проблема:
using System;
using System.Collections.Generic;
using System.Text;
using [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stefoo.wordpress.com&blog=2847421&post=5&subd=stefoo&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Разработвайки проект, който използва много събития, ми се стори доста досадно за всяко едно събитие да се пише специален метод за актовиране. Като допълнително затруднение се появи и условието всеки метод, който се абонира за събитието, да се извиква индивидуално, т.е. да се използва InvocationList-а на събитието. Ето моето решение на проблема:</p>
<pre width="1000">using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;

namespace NSVotingService
{
    public static class EventUtils
    {
        ///
        /// Иницира произволно въбитие.
        ///
        /// EventUtils.FireEvent(ownerObject, "SomethingChanged", args);
        /// Обектът собственик на събитието
        /// Наименование на събитието
        /// EventArgs
        ///
        public static void FireEvent(object eventOwner, string eventName, EventArgs args)
        {
            // Използва се за достъп до InvocationList-а на event-а
            //Чрез Reflection извлича информацията за полето на event-а
            FieldInfo filedInfo = eventOwner.GetType().GetField(eventName,
                System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
            //Използва се за премахване на делегата от
            //InvocationList-а ако възникне exception по време на изпълнението му
            EventInfo eventInfo = eventOwner.GetType().GetEvent(eventName);

            MulticastDelegate eventDelegate = (MulticastDelegate)filedInfo.GetValue(eventOwner);
            Delegate[] delegates = null;
            if (eventDelegate != null)
            {
                try
                {
                    //Извличаме InvocationList-а на събитието
                    delegates = eventDelegate.GetInvocationList();
                }
                catch (MemberAccessException e)
                {
                    throw e;
                }
                if (delegates != null)
                {
                    lock (eventOwner)
                    {
                        foreach (Delegate dlg in delegates)
                        {
                            try
                            {
                                dlg.Method.Invoke(dlg.Target, new object[] { eventOwner, args });
                            }
                            catch (Exception e)
                            {
                                //Нещо непредвидено се е случило
                                //Премахваме делегата от InvocationList-а на събитието
                                eventInfo.RemoveEventHandler(eventOwner, dlg);
                            }
                        }
                    }
                }
            }
        }
    }
}
</pre>
</h1>
<p><a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=776014&amp;SiteID=1" target="_blank">още информация</a></p>
<p>If you need this in English please contact <a href="http://stefoo.wordpress.com/about/" target="_blank">me</a>.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/stefoo.wordpress.com/5/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/stefoo.wordpress.com/5/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/stefoo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/stefoo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/stefoo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/stefoo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/stefoo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/stefoo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/stefoo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/stefoo.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/stefoo.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/stefoo.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=stefoo.wordpress.com&blog=2847421&post=5&subd=stefoo&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://stefoo.wordpress.com/2008/04/25/reflection_events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8916d16ddf5ddc7c8839892c243c1add?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">stefoo</media:title>
		</media:content>
	</item>
	</channel>
</rss>