定时器保持循环

时间:2012-03-04 14:23:30

标签: c# visual-studio-2010 windows-phone-7

我有这个计时器(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;
        }
    }

3 个答案:

答案 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事件

来实现

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.downloadcompleted.aspx

您可能还应该侦听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();
    }
}