У меня есть приложение WPF, которое может получить номер значка из устройства чтения карт. Это приложение WPF использует сценарий для чтения карты, поэтому на нем есть кнопки запуска, паузы и остановки (потому что я выполняю цикл опроса).
У меня также есть веб-сайт, с которым я хочу, чтобы он взаимодействовал с Приложение WPF с использованием WebSocket (с использованием System.Net.WebSockets). WebSocket работает, поскольку я могу передать значение номера значка на клиентский веб-сайт.
Далее моя цель — предоставить пользователю возможность запускать, приостанавливать и останавливать приложение WPF, таким образом напрямую взаимодействуя с кнопками.
ниже находится моя кнопка остановки, я использую ее, потому что она самая простая из трех. конечный автомат — это другой класс, который обрабатывает текущее состояние машины и позволяет мне контролировать поведение каждой кнопки.
Код: Выделить всё
private void StopButton_Click(object sender, RoutedEventArgs e)
{
try
{
_stateMachine.Stop(); //state machine set to Stopped
_logger.Info("Service stopped.");
}
catch (Exception ex)
{
_logger.Error("Error stopping service.", ex);
}
}
Код: Выделить всё
public void RunPauseButton_Click(object sender, RoutedEventArgs e)
{
try
{
switch (_stateMachine.CurrentState)
{
case StateMachine.State.Stopped:
_stateMachine.Run(GetScriptRunnerPath, GetReaderSelection);
_logger.Info("Service started.");
break;
case StateMachine.State.Running:
_stateMachine.Pause();
_logger.Info("Service paused.");
break;
case StateMachine.State.Paused:
_stateMachine.Resume(GetScriptRunnerPath, GetReaderSelection);
_logger.Info("Service resumed.");
break;
}
}
catch (Exception ex)
{
_logger.Error("Error toggling service state.", ex);
}
}
p/s Я удалил строку для метода RunPause, потому что думаю, что это только удлинит код.
Код: Выделить всё
public class ApplicationController //
{
public event EventHandler StopRequested;
public void OnStopRequested()
{
StopRequested?.Invoke(this, EventArgs.Empty);
}
}
Код: Выделить всё
private readonly ApplicationController _controller;
public MainWindow()
{
InitializeComponent();
_controller = new ApplicationController();
// Subscribe to events from the controller
_controller.StopRequested += Controller_StopRequested;
}
private void StopButton_Click(object sender, RoutedEventArgs e)
{
// Trigger the StopRequested event
_controller.OnStopRequested();
}
Код: Выделить всё
public class ApplicationController
{
public event EventHandler StopRequested;
public void OnStopRequested()
{
StopRequested?.Invoke(this, EventArgs.Empty);
try
{
_stateMachine.Stop();
_logger.Info("Service stopped.");
}
catch (Exception ex)
{
_logger.Error("Error stopping service.", ex);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... -websocket
Мобильная версия