フォルダ内の動画を検索する機能があります。そのフォルダー内のすべてのビデオ ファイルに対して、MediaElement を追加して再生を開始します。私が cca 10 のビデオを持っているときは大丈夫でした。次に、いくつかのビデオを追加し、(パフォーマンスのため) ビュー要素をグリッドからキャンバスに変更しましたが、一部のメディア要素が表示されませんでした (本来あるべき場所に空白があります)。同一の動画ではありません。ほとんどの場合、これらは後で処理されるビデオで発生しますが、常にではありません。どこに問題があるか知っている人はいますか?残りのビデオは問題なく再生され、アプリケーションも正常に動作しているため、パフォーマンスに問題はないと思います。それで、いくつかの制限はありますか?または、私が間違っていることは何ですか?テスト ビデオは .wmv で低品質 (320x240) です。
意見:
<Canvas x:Name="mainCanvas">
<ScrollViewer HorizontalScrollBarVisibility="Auto" Width="1680" Height="750">
<Canvas x:Name="videoCanvas">
</Canvas>
</ScrollViewer>
</Canvas>
および MainWindow.xaml.cs からのコード
public MainWindow()
{
InitializeComponent();
this.WindowStyle = WindowStyle.None;
this.WindowState = WindowState.Maximized;
getAllVideosFromFolder(System.IO.Path.GetFullPath(@"Videos\"));
}
private void getAllVideosFromFolder(string path)
{
try
{
var videoFiles = DirectoryHelper.GetFilesByExtensions(new DirectoryInfo(path), ".wmv", ".mp4", ".avi", ".mov");
int i = 0, j = 0;
foreach (var item in videoFiles)
{
MediaElement melem = createMediaElementForPreview(item.FileName);
Canvas.SetTop(melem, i * 250);
Canvas.SetLeft(melem, j * 340);
videoCanvas.Children.Add(melem);
i++;
if (i > 2)
{
i = 0;
j++;
}
videos.Add(videoClass);
}
videoCanvas.Width = j * 340;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private MediaElement createMediaElementForPreview(string sourcePath)
{
MediaElement melem = new MediaElement();
melem.LoadedBehavior = MediaState.Manual;
melem.Source = new Uri(sourcePath, UriKind.Relative);
melem.Width = 320;
melem.Height = 240;
melem.Volume = 0;
melem.Play();
melem.MouseDown += melem_MouseDown;
return melem;
}