C#/Avalonia 通过订阅模式触发函数

namespace Comm
{
    /// <summary>
    /// 定义事件发布
    /// </summary>
    public class GlobalEventPublisher
    {
        // 定义自定义事件
        public static event EventHandler<CustomEventArgs> CustomEvent;

        // 触发事件的方法
        public static void RaiseCustomEvent(string message)
        {
            CustomEvent?.Invoke(null, new CustomEventArgs { Message = message });
        }
    }
    // 自定义事件参数类
    public class CustomEventArgs : EventArgs
    {
        public string Message { get; set; }
    }
    /// <summary>
    /// 定义事件订阅者
    /// </summary>
    public class GlobalEventSubscriber
    {
        private Action<string> ac;
        public GlobalEventSubscriber(Action<string> ac)
        {
            this.ac = ac;
            // 订阅全局事件
            GlobalEventPublisher.CustomEvent += OnCustomEvent;
        }

        // 事件处理程序
        private void OnCustomEvent(object sender, CustomEventArgs e)
        {
            if (ac!=null)
            {
                ac(e.Message);
            }
        }

        // 取消订阅(可选)
        public void Unsubscribe()
        {
            GlobalEventPublisher.CustomEvent -= OnCustomEvent;
        }
    }
}
//发布者
GlobalEventPublisher.RaiseCustomEvent("DataReload");//通知面板数据更新
//订阅者
//创建订阅
GlobalEventSubscriber globalEventSubscriber = new GlobalEventSubscriber(SubscriberCallBack);

/// <summary>
/// 订阅回调
/// </summary>
/// <param name="type"></param>
private void SubscriberCallBack(string type)
{
    try
    {
        if(type== "DataReload")
        {
            Dispatcher.UIThread.InvokeAsync(() => {
                #region 执行数据刷新
                
                #endregion
            });
        }
    }
    catch(Exception ex)
    {
        Dispatcher.UIThread.InvokeAsync(() =>
        {
            ToastService.Error(_toastManager, "提示", ex.Message.ToString());
        });
    }
}

 

posted @ 2025-04-29 17:12  一步一个坑  阅读(83)  评论(0)    收藏  举报