泛型和事件 - 有没有办法做到这一点?

时间:2011-05-09 18:59:09

标签: c# events generics

毕竟,我最近遇到了订阅/取消订阅的并发性并且通知我试图将我高在一个泛型类并使用它。

唉,我找不到办法,因为这是不允许的:

 public class LCLMulticastEvent<T> where T: System.MulticastDelegate
    {
        private event T internalEvent;

        private object lockObject = new object();

        public event T OnEvent
        { 
           add 
           { 
             lock( lockObject )
             {
                internalEvent += value; 
             }
           }

           remove 
           { 
               lock( lockObject )
               {
                  internalEvent += value; 
               }
            }
        }
        public void notify( params object[] args)
        { 
           if( internalEvent != null )
           {
               lock( lockObject )
               {
                   foreach( T invokee in internalEvent.GetInvocationList() )
                   {
                           invokee.DynamicInvoke( args );
                   }
               }
           }
        }

    }

编译器拒绝接受System.MulticastDelegate,说这是一个特殊的类......

有什么办法吗?

编辑:我在第一次赎罪时试图过于简短。 我想要的是实现一种线程安全的事件包装器。 @Thomas:DynamicInvoke应该是解决方案......

TIA

马里奥

1 个答案:

答案 0 :(得分:1)

我不清楚你要在这里实现什么,但也许这会有所帮助:你可以在EventArgs类型而不是MultiCastDelegate

中使类成为通用的
public class LCLMulticastEvent<TEventArgs> where TEventArgs : EventArgs
{
    private event EventHandler<TEventArgs> internalEvent;

    private object lockObject = new object();

    public event EventHandler<TEventArgs> OnEvent
    { 
        add { internalEvent += value; }
        remove { internalEvent -= value; }
    } 
}