C# uwp属性等待显示wierd行为
在我的UWP应用程序中,我有两个属性,它们都绑定到UI。这一切都很好,直到我尝试使用Task.delay延迟添加这些属性之一 期望值:视频集合属性应该毫不延迟地获取项目,当前属性应该在延迟一段时间后获取每个项目 问题:当我尝试延迟时,两个属性都会延迟,因为在循环的第一次运行之后,延迟实际上会延迟整个循环的执行,但我只想延迟一行代码 这是我的代码C# uwp属性等待显示wierd行为,c#,asynchronous,uwp,async-await,uwp-xaml,C#,Asynchronous,Uwp,Async Await,Uwp Xaml,在我的UWP应用程序中,我有两个属性,它们都绑定到UI。这一切都很好,直到我尝试使用Task.delay延迟添加这些属性之一 期望值:视频集合属性应该毫不延迟地获取项目,当前属性应该在延迟一段时间后获取每个项目 问题:当我尝试延迟时,两个属性都会延迟,因为在循环的第一次运行之后,延迟实际上会延迟整个循环的执行,但我只想延迟一行代码 这是我的代码 foreach (var file in VideoFiles) { var props = await file.Properties.Get
foreach (var file in VideoFiles)
{
var props = await file.Properties.GetVideoPropertiesAsync();
var dur = props.Duration;
var myviews = await DbHelper.GetMyViews(file.Path);
var vv = new Video
{
MyVideoFile = file,
Views = myviews,
Duration = $"{dur.Hours.ToString()} : {dur.Minutes.ToString()} : {dur.Seconds.ToString()}",
Display = await FileHelper.GetDisplay(file),
};
Videos.Add(vv);// this line should be execute without any delay
await Task.Delay(3000);//if I comment this delay line of code then both properties keep getting filled without any delay, which is not what I want
Current = vv; // this line should be executed after delay
}
更新
实际上,“视频”是一组视频对象,我将它们显示在UI的GridView上,因此我需要毫不延迟地添加它们。
但是Current是一个绑定到页面标题的对象,我需要每3秒更改一次,每3秒标题应该从下一个GridView项目中提取数据并显示出来,这就是为什么我只在更新“Current”时需要延迟的原因属性。使用
分派器
将当前
属性设置在for循环之外。大概是这样的:
public MainPage()
{
this.InitializeComponent();
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(3);
int currentIndex = 0;
timer.Tick += (s, e) =>
{
//this code will run every 3 seconds...
if (Videos.Count > currentIndex)
{
Current = Videos[currentIndex++];
}
};
timer.Start();
}
您不能在单个循环中处理此问题。填写集合并使用计时器选择下一个项目。您可以提供一些关于如何使用计时器的代码吗?您可以说明我应该如何在循环上下文中使用此计时器吗?我的意思是,我应该在循环开始之前启动timer.start()函数吗?是的,它会每3秒钟检查一次视频采集。