private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (; ; )
{
System.Threading.Thread.Sleep(700);
d = d.AddDays(1);
backgroundWorker1.ReportProgress(0);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
....
EventVizualization(events.GetEvent());
....
}
private void EventVizualization(ListOfEvents loe)
{
switch (loe)
{
case ListOfEvents.123:
btnGoTo123.Visibility = Visibility.Visible;
break;
.....
}
}
<XAML>
<Button Name="btnGoTo123" Style="{StaticResource eventWindow}" Visibility="Collapsed" Click="btnGoTo123_Click">
<Grid>
<Grid.Background>
<ImageBrush ImageSource="img/***.png"/>
</Grid.Background>
</Grid>
</Button>
</XAML>
BagroundWorker: как поставить на паузу, а потом снять с паузы?
1. В отдельном потоке крутится бесконечный цикл, который каждые полсекунды прибавляется день к дефолтному значению переменной d типа DateTime. - реализовано в методе DoWork от BackgroundWorker. Это все что делает DoWork.
2. В зависимости от приобретенного значения d выполняются проверки в методе ProgressChanged. Так же в этом методе определяется показывать то или иное окно или нет. В каждый вызов ProgressChanged может быть показано только одно окно или не показано ниодного.
Прим. Окна представляют собой button'ы с кастомным стилем. Поумолчанию у таких окон Visibility = Collapsed.
Вопрос: Как перестать выполнять бесконечный цикл в DoWork, в момент когда окно(button) - отображается (Visibility = Visible) и возобновлять цикл, когда это окно закрываешь?
Код:
Project's type - Silverlight: Widows Phone Application
Код:
private void EventVizualization(ListOfEvents loe)
{
switch (loe)
{
case ListOfEvents.123:
btnGoTo123.Visibility = Visibility.Visible;
backgroundWorker1.Pause();
break;
.....
}
}
private void btnGoTo123_Click(object sender, RoutedEventArgs e)
{
btnGoTo123.Visibility = Visibility.Collapsed;
backgroundWorker1.Play();
}
{
switch (loe)
{
case ListOfEvents.123:
btnGoTo123.Visibility = Visibility.Visible;
backgroundWorker1.Pause();
break;
.....
}
}
private void btnGoTo123_Click(object sender, RoutedEventArgs e)
{
btnGoTo123.Visibility = Visibility.Collapsed;
backgroundWorker1.Play();
}
Зачем использовать BackgoundWorker в бесконечном цикле? Почему бы для этого (выполнение кода каждые X секунд) не использовать таймер Threading.Timer?