【问题标题】:C# Windows Service doesn't invoke an event in another classC# Windows 服务不调用另一个类中的事件
【发布时间】:2016-01-15 15:15:12
【问题描述】:

这是我在课堂上的代码

  public FRAME()
    {

       MFileClass media= new MFileClass();
        media.FileNameSet(@"E:\TEST VIDEOS\o.mpg", "");
        media.FilePlayStart();
        media.OnFrame += M_objFile_OnFrame;

    }
    public static void M_objFile_OnFrame(string bsChannelID, object pMFrame)
    {
        Console.WriteLine("Trigged");
    }

这是我的服务代码

 public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        FRAME frm = new FRAME();
        base.OnStart(args);
    }

    protected override void OnStop()
    {
        base.OnStop();
    }

M_objFile_OnFrame 函数不起作用。 我想我需要调用这个函数,但不确定如何调用服务

【问题讨论】:

  • 什么是MFileClass?您认为 Windows 服务在没有桌面的情况下如何播放视频?
  • 它是我们SDK的一个对象。它渲染到输出设备卡。它不需要接口什么的
  • 你不应该设置OnFrame 回调在开始视频之前 - 否则你可能会错过前几帧......真的很难回答你的实际情况不过问题是,因为我们对 MFileClass 的作用一无所知。此代码在交互运行时是否有效?如果是这样,那是控制台应用程序,还是 WinForms,还是什么?您确定您的服务实际上正在运行吗 - 您似乎没有任何登录来验证它是否正在运行...
  • 此代码在 WinForm 应用程序中正常工作,但在 Windows 服务应用程序中不会触发 onFrame 事件。
  • 你怎么知道onFrame没有被触发。它所做的只是写入控制台(在 Windows 服务中,您将看不到控制台!)。我认为您需要在文件中添加一些适当的日志记录(例如使用log4net 或类似的),然后重试...

标签: c# windows-services


【解决方案1】:

地内胆碱

protected override void OnStart(string[] args)
{
   timerDelegate = new System.Threading.TimerCallback(CustomStart);
    stateTimer = new System.Threading.Timer(timerDelegate, null, 1000, 1000 * 60 * 1);
}

bool isStart = false;
public void CustomStart(object stateObject)
{
if (isStart) return;
isStart = true;

  FRAME frm = new FRAME();

 }

【讨论】:

  • 这究竟应该如何解决 OPs 问题?
  • Selam, CustomStart metodu tetiklenmiyor bu şekilde.
猜你喜欢
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 2018-12-17
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多