В настоящее время я разрабатываю систему, для которой требуется время ожидания сеанса, например подсистему.Это компактное приложение Framework 3.5, но принципы очень похожи на WinForms, поэтому большинство решений Winforms, скорее всего, будут работать.который управляет шоу, знайте, что пользователь ничего не сделал в течение 20 м, поэтому вызовите функцию выхода из системы и вернитесь к форме входа в систему.Мне кажется, что это пахнет и слишком упрощенно, поскольку предполагает, что ВСЕ действия направляются через кнопку.Я думаю, что у приложения или системы должен быть способ узнать, когда с ним взаимодействуют.
public partial class MainWindow : Window
{
private FlowBase CurrentFlow { get; set; }
private TimerService _service;
private TimerService CurrentTimerService
{
get { return _service ?? (_service = new TimerService()); }
}
private TimeSpan _allowedInactivityTime = TimeSpan.FromSeconds(10);
private TimeSpan _currentInactivityTime = TimeSpan.FromSeconds(0);
public MainWindow()
{
InitializeComponent();
GoToMainMenu();
CurrentTimerService.OnTick += (increment) =>
{
if (_currentInactivityTime >= _allowedInactivityTime)
{
ResetInactivityTimer();
GoToMainMenu();
}
_currentInactivityTime = _currentInactivityTime.Add(increment);
};
}
private void ResetInactivityTimer()
{
_currentInactivityTime = TimeSpan.FromSeconds(0);
}
private void btnExit_Click(object sender, RoutedEventArgs e)
{
if (ccContent.Content is MainMenu)
Close();
else
CurrentFlow.ExitFlow();
}
private void btnNext_Click(object sender, RoutedEventArgs e)
{
ResetInactivityTimer();
ccContent.Content = CurrentFlow.Process(null);
}
private void GoToMainMenu()
{
var mm = new MainMenu();
mm.OnFlowSelected += (flow) =>
{
CurrentFlow = flow;
CurrentFlow.OnExit += GoToMainMenu;
ccContent.Content = flow.Initialize();
};
ccContent.Content = mm;
}
}
Заранее благодарен за любую помощь