Uwp 任务。跳过延迟

Uwp 任务。跳过延迟,uwp,task,Uwp,Task,我的目标是在uwp中反复播放音频文件。中间是一个等待时间,它会改变 问题是waitingtime总是被跳过 这就是我所尝试的: private async Task Characteristic_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args) { while (true) { var t = Task.Run(delegate {

我的目标是在uwp中反复播放音频文件。中间是一个等待时间,它会改变

问题是waitingtime总是被跳过

这就是我所尝试的:

private async Task Characteristic_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
{
    while (true)
    {
        var t = Task.Run(delegate
        {
            abspielenAsync();
            return 42;
        });
        t.Wait();
    }
}

private async void abspielenAsync()
{
    if (neu)
    {
        await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
        () =>
        {
            mysong = new MediaElement();

        });
        Windows.Storage.StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Assets");
        Windows.Storage.StorageFile file = await folder.GetFileAsync("he.wav");
        var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
        await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
        () =>
        {
            mysong.SetSource(stream, file.ContentType);
        });
        neu = false;
    }
    await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
        () =>
        {
            mysong.Play();
            while(mysong.CurrentState == Windows.UI.Xaml.Media.MediaElementState.Playing)
            {

            }
        });
    await Task.Delay((int)(waitingtime * 1000));
    Debug.WriteLine((waitingtime * 1000).ToString());
}

这将始终立即返回:

var t = Task.Run(delegate
        {
            abspielenAsync();
            return 42;
        });
        t.Wait();
您的
abspielenancy
方法未返回
任务,因此无法等待。因此,您只是在后台运行它,而不是等待它(通常称为“开火并忘记”)


如果在返回
42
之前要等待
abspielenancy()
完成,请使
abspielenancy
方法返回
Task
,并将其调用位置更改为
await abspielenancy()

@Gabriel告诉我们为什么代码不运行

我们需要更改
abspielenancy
中的代码以使任务运行

private async void abspielenAsync()
我们应该将
void
更改为
Task
,并在任务中等待它

private async Task abspielenAsync()
然后我们应该改变特征值中的代码

    while (true)
    {
        var t = Task.Run(async () => 
        {
            await abspielenAsync();
            return 42;
        });
        t.Wait();
    }
方法名称应命名为。看