共用方式為


鬆散結合的事件

由 COM+ 所提供的鬆散結合的事件模型可支援晚期繫結的事件或發行者和訂閱者與事件系統之間的方法呼叫。事件系統並不會重複輪詢伺服器,而是將有用的資訊通知相關單位。

若要使用這項服務,事件類別和事件接收 (Event Sink) 必須直接或間接從 System.EnterpriseServices.ServicedComponent 類別衍生而來。

注意 若要在事件接收和事件類別之間建立永續性或暫時性 (Transient) 訂閱,請使用 COM+ 管理物件和指令碼或 Managed 程式碼。您也可以從 Windows 控制台使用元件服務管理工具,建立暫時性 (Transient) 訂閱。

下列範例會建立事件介面、ILceMsg、事件類別、事件接收 (Event Sink) 和發行者。事件類別和事件接收都是從 ILceMsg 介面衍生而來。

事件

Imports System
Imports System.IO
Imports System.Reflection
Imports System.EnterpriseServices
Imports System.Runtime.InteropServices

<assembly: ApplicationName("EventDemo")>
<assembly: ApplicationActivation(ActivationOption.Library)>
<assembly: AssemblyKeyFile("EventDemoSvr.snk")>

Namespace EventDemo
   Public Interface ILceMsg
      Sub EventMethod(message As String)
   End Interface    
      <EventClass()> _
      Public Class LceClass 
Inherits ServicedComponent Implements ILceMsg 
      Public Sub EventMethod(message As String) implements _
            ILceMsg.EventMethod
      End Sub 
   End Class 
    
   Public Class LceSink 
   Inherits ServicedComponent Implements ILceMsg 
      Public Sub EventMethod(message As String) implements _
            ILceMsg.EventMethod
         MessageBox.Show(message, "Event sink")
      End Sub
   End Class 
End Namespace 
[C#]
using System;
using System.IO;
using System.Reflection;
using System.EnterpriseServices;
using System.Runtime.InteropServices;

[assembly: ApplicationName("EventDemo")]
[assembly: ApplicationActivation(ActivationOption.Library)]
[assembly: AssemblyKeyFile("EventDemoSvr.snk")]

namespace EventDemo
{
    public interface ILceMsg
    {
        void EventMethod(string message);
    }

    [EventClass]
    public class LceClass : ServicedComponent, ILceMsg
    {
        public void EventMethod(string message){}
    }

    public class LceSink : ServicedComponent, ILceMsg
    {   
        public void EventMethod(string message)
        {
            MessageBox.Show(message, "Event sink");
        }
    }
}

發行者

Protected Sub Fire_Click(sender As Object, e As System.EventArgs)_
Handles fireEvent.Click
      Dim evt As ILceMsg = CType(New LceClass(), ILceMsg)
      evt.EventMethod("Hello events")
End Sub 
[C#]
protected void Fire_Click (object sender, System.EventArgs e)
{
      ILceMsg evt = (ILceMsg) new LceClass();
      evt.EventMethod("Hello events");
}

請參閱

可用的 COM+ 服務摘要 | System.EnterpriseServices 命名空間