首页 > 解决方案 > MediaElement.SetSource() 自动播放我的 MP3

问题描述

我目前正在使用 UWP 在 C# 中开发一个项目。我需要播放 MP3 文件,但不是立即播放,但如果我单击应用程序中的按钮。所以我创建了一个按钮“加载 MP3”,它运行以下方法: 加载 MP3 方法

private async void open_MP3_Click(object sender, RoutedEventArgs e)
    {

        mp3.AudioCategory = Windows.UI.Xaml.Media.AudioCategory.Media;


        var picker = new Windows.Storage.Pickers.FileOpenPicker();
        picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List;
        picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.ComputerFolder;
        picker.FileTypeFilter.Add(".mp3");

        StorageFile sf = await picker.PickSingleFileAsync();
        var stream = await sf.OpenAsync(FileAccessMode.Read);
        mp3.SetSource(stream, sf.ContentType);
        //await Task.Delay(3500);
        //mp3.Pause();
    }

如果我运行此代码,我选择的歌曲将立即播放,而无需单击我创建的播放按钮。如果我在该行设置断点,mp3.SetSource()则代码不会立即播放歌曲。我试图解决该mp3.Pause()方法的问题,但必须插入 350 毫秒的延迟才能完全正常工作。如果我选择延迟很长(比如这里的 3500 毫秒),歌曲开始播放并在 3.5 秒后停止,显然。

因为我必须将歌曲的开始时间精确到毫秒才能让我的项目工作,所以延迟方法对我来说并不理想。有谁知道该SetSource()方法有什么问题?

标签: c#uwpmediaelement

解决方案


MediaElement控件有一个默认AutoPlay设置为的属性(请参阅文档)。这意味着无论何时设置源,它都会在源加载后立即自动开始播放。为避免这种情况,只需将属性设置为 false:trueAutoPlay

mp3.AutoPlay = false;

推荐阅读