首页 > 解决方案 > 事件处理程序不会在控制台中启动,但在 Windows 中会启动

问题描述

我有这样的课。该事件Topology_SynchStateChange在 Windows 表单中被触发,但不会在控制台应用程序中触发。请帮忙。

public class Presenter
{
private AlarmManager commandAlarmManager;
private Site commandSite;
private NetworkCredential commandUserCredentials;
private HostManager.StateChangedHandler commandLoginStateChangeHandler;
private LocalHostManager.PluginStateChangedHandler commandPluginStateChangeHandler;
private StandaloneAsyncExecutor AsyncExecutor = new StandaloneAsyncExecutor();
private DeviceChannel defaultChannel;
private DeviceChannel DefaultChannel { get { return defaultChannel; } }

public Presenter()
{
}

public void GetCameraURL()
{

  //Grabs a reference to the Alarm Manager of the command SDK.
  commandSite.Topology.SynchStateChange += Topology_SynchStateChange;


  commandSite.LocalHost.PluginStateChanged += commandPluginStateChangeHandler =
      (LocalHostManager localHost, LocalHostManager.PluginStates state, Exception error) =>
      {
        if (error != null)
        {
          commandSite.LocalHost.PluginStateChanged -= commandPluginStateChangeHandler;
          // HandleException("Login Halted: Plugin Error", error);
          // view.SetOpenCloseEnabled(!isCes);
        }
        if (state == LocalHostManager.PluginStates.Online)
        {
          commandSite.LocalHost.PluginStateChanged -= commandPluginStateChangeHandler;
          //view.SetOpenCloseEnabled(true);
        }
      };

      commandSite.Host.StateChanged += commandLoginStateChangeHandler =
      (HostManager host, HostManager.HostState state, MarchNetworks.Command.CommandAPIException error) =>
      {
        if (error != null)
        {
          //HandleException("Login Halted: " + error.ExceptionCode.ToString(), error.InnerException);
          //view.SetLoginReady();
          CleanUpAll();
        }

        switch (state)
        {
          case HostManager.HostState.Disconnected:
            //HandleException("Login Halted: Disconnected", null);
            break;
          case HostManager.HostState.LoginReady:
            commandSite.Host.Login(commandUserCredentials);
            break;
          case HostManager.HostState.Online:
            //view.SetAlarmInboxReady();
            //UpdateAlarmInbox();
            //commandSite.Host.StateChanged -= commandLoginStateChangeHandler;
            break;
        }
      };
}

private void Topology_SynchStateChange(TopologyModel model, TopologyModel.SynchState state)
{
  if (commandSite != null && commandSite.Topology != null)
  {
    if (state == TopologyModel.SynchState.Synchronized)
    {
      // Set default video channel
      defaultChannel = commandSite.Topology.Channels.Where(deviceChannel => deviceChannel.HasVideo
      && deviceChannel.State == DeviceChannelState.Online
      && deviceChannel.IsEnabled
      && deviceChannel.Name.Contains("RFID")
      ).First<DeviceChannel>();

      if (!defaultChannel.IsLoaded)
      {
        defaultChannel.Loaded += DefaultChannel_Loaded;
        //defaultChannel.Load();
        defaultChannel.Load(checkLoaded, defaultChannel.MediaStreamInfo);
      }
    }
    //else if (state == TopologyModel.SynchState.Disconnected)
    //{
    //    TopologyStateChanged( this, new TopologyStateChangedEventArgs( model, state, false ) );
    //}
  }
}

private void DefaultChannel_Loaded(DeviceChannel deviceChannel)
{
  defaultChannel.Loaded += DefaultChannel_Loaded;

  DeviceChannel defaultVideoChannel = defaultChannel;
  defaultVideoChannel.GetLive(ReceivedLive, MarchNetworks.Command.Media.VideoEncoderResolution.LOW);
}
}

标签: c#

解决方案


推荐阅读