You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向C#类库DLL传递函数并在其定时器事件中执行

实现C#服务向类库DLL传递方法并在定时器触发时执行

1. 修改类库DLL代码,支持接收外部方法

我们用.NET内置的Action类型(无参无返回值委托)来存储服务传递的方法,在定时器事件中调用该方法。修改后的DLL代码如下:

using System;
using System.Timers;

namespace MyClassLibrary
{
    public class Main_Prog
    {
        private System.Timers.Timer timer1 = new System.Timers.Timer();
        // 存储外部传递的方法
        private Action _externalMethod;

        // 修改Main_Start方法,接收Action参数
        public void Main_Start(Action externalMethod)
        {
            _externalMethod = externalMethod;
            Initialize_timer1();
        }

        public void Initialize_timer1()
        {
            timer1.Elapsed += OnTimedEvent_timer1;
            timer1.Interval = 35;
            timer1.Start();
        }

        private void OnTimedEvent_timer1(object sender, EventArgs e)
        {
            // 先判空避免空引用异常
            if (_externalMethod != null)
            {
                _externalMethod(); // 执行传递过来的服务端方法
            }
            // 原有业务代码
        }
    }
}

2. 修改服务应用代码,传递方法到DLL

在服务的OnStart方法中,将服务自身的func_passed方法作为参数传入DLL的Main_Start方法:

using MyClassLibrary;
using System.ServiceProcess;

namespace Concheetah_Service_Bahmuller
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            MyClassLibrary.Main_Prog main_Prog = new MyClassLibrary.Main_Prog();
            // 传递当前实例的func_passed方法给DLL
            main_Prog.Main_Start(func_passed);
        }

        public void func_passed()
        {
            // 你的补充业务代码
        }
    }
}

关键说明

  • 如果你的方法需要接收参数或返回值,可以替换为Action<T>、Func<TResult>等对应委托类型。
  • 必须在调用外部方法前判空,防止DLL未接收到方法时触发空引用异常。

内容的提问来源于stack exchange,提问作者anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:40:46