首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DispatcherTimer等待循环

DispatcherTimer等待循环
EN

Stack Overflow用户
提问于 2014-06-06 06:12:03
回答 1查看 892关注 0票数 2

我要每隔几秒钟装一张照片。我创建了DispatcherTimer,我希望在计时器滴答中什么也不做,只是等待间隔。我怎么能这么做?

代码语言:javascript
复制
if (window.DialogResult == true) {
                st=window.st;
                for(int i=0;i<=st;i++){
                    timer = new DispatcherTimer();
                    timer.Interval = new TimeSpan(0,0,5);
                    timer.Tick += new EventHandler(timer_Tick);
                    timer.Start();
                arr[i]=window.arr[i];
                image1.Source = arr[i];
                }
            }

现在我有一个空的滴答。

代码语言:javascript
复制
void timer_Tick(object sender, EventArgs e)
        {

        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-06 06:16:35

一种选择是使用async/await

代码语言:javascript
复制
async void button_click(object sender, RoutedEventArgs e)
{
    // prepare the array
    // ...

    for (var i = 0; i < 100; i++)
    {
        image1.Source = arr[i];
        await Task.Delay(5000);
    }
}

您可能希望确保在异步循环仍在迭代时,不重新输入button_click。检查卢西恩·威什克的异步可重入性,以及处理它的模式。

如果你坚持使用DispatcherTimer

代码语言:javascript
复制
async void button_click(object sender, RoutedEventArgs e)
{
    // prepare the array
    // ...

    var tcs = new TaskCompletionSource<object>();
    var timer = new DispatcherTimer();
    timer.Interval = new TimeSpan(0,0,5);
    timer.Tick += (_, __) => tcs.SetResult(Type.Missing);
    timer.Start();
    try
    {
        for (var i = 0; i < 100; i++)
        {
            image1.Source = arr[i];
            await tcs.Task;
            tcs = new TaskCompletionSource<object>();
        }
    }
    finally
    {
        timer.Stop();
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24075350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档