我有这个计时器(timer2),它每60秒运行一次.. 我得到了第二个计时器(timer4)
当60秒结束时,timer2_Tick会执行一些操作并启动timer4。 计时器4确保在开始行动之前等待4秒(我需要4秒才能确保所有下载的数据都在那里)
当这4秒钟结束时,计时器应该改变图像,它会... 这一切都有效..
问题是图像每4秒闪烁一次..图像在datta模板中..
我该如何阻止.. ??我需要Stop()还是需要一个正在运行的计数器.. ??
请帮助这让我疯了..
private void timer2_Tick(object sender, EventArgs e )
{
locationTextBox2.Text = "";
if (locationTextBox2.Text == "")
{
Weatherframe.Source = (ImageSource)new ImageSourceConverter().ConvertFromString("");
}
Weatherframe2.Source = Weatherframe.Source;
System.Windows.Threading.DispatcherTimer timer4 = new System.Windows.Threading.DispatcherTimer();
timer4.Interval = new TimeSpan(0, 0, 0, 4, 000); // 500 Milliseconds
timer4.Tick += new EventHandler(timer4_Tick);
timer4.Start();
}
void timer4_Tick(object sender, EventArgs e)
{
if (locationTextBox2.Text == String.Empty)
{
locationTextBox2.Text = textBlock2.Text;
}
}
答案 0 :(得分:1)
你永远不会停止计时器,所以它会每四秒钟保持一次。
只需在处理程序中的计时器上调用Stop
,但为此你需要在成员变量中保留对计时器的引用,以便在创建它之后可以访问它。
System.Windows.Threading.DispatcherTimer timer4;
private void timer2_Tick(object sender, EventArgs e )
{
locationTextBox2.Text = "";
if (locationTextBox2.Text == "")
{
Weatherframe.Source = (ImageSource)new ImageSourceConverter().ConvertFromString("");
}
Weatherframe2.Source = Weatherframe.Source;
timer 4 = new System.Windows.Threading.DispatcherTimer();
timer4.Interval = new TimeSpan(0, 0, 0, 4, 000); // 500 Milliseconds
timer4.Tick += new EventHandler(timer4_Tick);
timer4.Start();
}
void timer4_Tick(object sender, EventArgs e)
{
timer4.Stop();
if (locationTextBox2.Text == String.Empty)
{
locationTextBox2.Text = textBlock2.Text;
}
}
答案 1 :(得分:1)
您可能应该在实际下载图像时收听,而不是猜测它需要4秒钟。您可以通过订阅BitmapSource上的DownloadCompleted事件
来实现您可能还应该侦听DownloadFailed和DecodeFailed来检测错误。
答案 2 :(得分:0)
void timer4_Tick(object sender, EventArgs e)
{
if (locationTextBox2.Text == String.Empty)
{
locationTextBox2.Text = textBlock2.Text;
System.Windows.Threading.DispatcherTimer theTimer = sender as System.Windows.Threading.DispatcherTimer;
theTimer.Stop();
}
}