Может появиться необходимость автоматического запуска стратегии в указанное время в течении дня, поэтому здесь мы рассмотрим самый простой способ реализации автозапуска стратегии по времени.
Ключевым элементом будет таймер, который будут периодически сверять текущее время и выбранное время старта стратегии, объявляем переменную таймера в классе окна:
Code
public partial class MainWindow : Window
{
private System.Threading.Timer _timer;
...
Объявим переменную типа DateTime, которая будет хранить время, когда нужно запустить стратегию, объявляем на том же уровне что и таймер:
Code
public partial class MainWindow : Window
{
private System.Threading.Timer _timer;
private DateTime _dtSelected;
...
И для удобства создадим на форме (окне) элемент выбора времени:
Code
<xctk:TimePicker Height="20" Width="100" x:Name="tpTime" />
в данном случае взят TimePicker из Xceed.Wpf.Toolkit:
Code
xmlns:xctk="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
заметим, что этот контрол имеет имя tpTime, далее мы будем обращаться к нему по этому имени.
Теперь нам надо создать экземпляр этого таймера, указать ему метод, который будет периодически вызываться, и запустить таймер, для этого создадим кнопку, и укажем действие по нажатию:
Code
private void AutoStartStrategyClick(object sender, RoutedEventArgs e)
{
if (tpTime.Value == null)
{
MessageBox.Show("Время запуска стратегии не выбрано");
return;
}
_dtSelected = tpTime.Value.Value;
_timer = new Timer(CheckStatus, null, 0, 1000);
}
И реализуем метод CheckStatus:
Code
public void CheckStatus(Object stateInfo)
{
var dtNow = DateTime.Now;
if (_dtSelected.TimeOfDay < dtNow.TimeOfDay)
{
_firstStrategy.Start();
}
}
Это минимум и немного больше, для того чтобы создать автоматический запуск стратегии по времени.
Есть специальные библиотеки, которые предоставляют большие возможности по работе с расписанием, например Quartz. Quartz позволяет создавать разного рода расписания, достаточно удобно и просто, если разобраться в его работе.