実際、MediaPlayer.Open を呼び出すと、ストリーム経由でファイルが自動的に読み込まれます。問題は、ファイルを削除しようとしたときにストリームがまだ開いていることです。
MediaPlayer には.Closeメソッドがあります。これを呼び出すと、ファイルを読み込んでいるストリームが閉じられます。
ここに MediaPlayer クラスのドキュメントがあるので、他に使用できるメソッドを確認できます: http://msdn.microsoft.com/en-us/library/system.windows.media.mediaplayer.aspx
編集: Close を呼び出したときにプレーヤーが再生を停止してもかまわない場合は、ファイルを閉じて削除するだけです。続行するために再生が必要な場合は、別のアプローチが必要になります。
Silverlight を使用している場合は、ストリームを直接 MediaElement にロードできます。
var bytes = File.ReadAllBytes(@"c:\yourfile.ext");
var mStream = new MemoryStream(bytes);
mediaElement1.SetSource(mStream);
残念ながら、WPF には同じストリーム サポートがありません。ストリームをリソース パックに書き込んで、MemoryStream の Uri を取得しようとしました。ただし、テストでは正しく再生できませんでした。あなたがそれをいじり、おそらくそれを機能させたい場合に備えて、私が持っていた私のソースを含めます:
var bytes = File.ReadAllBytes(@"C:\Bill\TestWaveFiles\14043.wav");
MemoryStream packStream = new MemoryStream()
Package pack = Package.Open(packStream, FileMode.Create, FileAccess.ReadWrite);
Uri packUri = new Uri("bla:");
PackageStore.AddPackage(packUri, pack);
Uri packPartUri = new Uri("/MemoryResource", UriKind.Relative);
PackagePart packPart = pack.CreatePart(packPartUri, "Media/MemoryResource");
packPart.GetStream().Write(bytes, 0, bytes.Length);
var inMemoryUri = PackUriHelper.Create(packUri, packPart.Uri);
mediaElement1.LoadedBehavior = MediaState.Manual;
mediaElement1.Source = inMemoryUri;
mediaElement1.Play();
もう 1 つのオプションは、ファイルを開く前に単純にファイルのコピーを作成することです。そうすれば、いつでもオリジナルを削除できます。ただし、削除するファイルを「マーク」することもできます。ユーザーがファイルの再生を終了したら、ファイルを閉じて削除できます。
追加のオプションの 1 つは、BoxedApp と呼ばれるサードパーティ ライブラリを使用することです。メモリストリームを含む「仮想ファイル」を作成できるようです。次に、この仮想ファイルを指す Uri を取得して、メディア プレーヤーにロードできます。この BoxedApp ライブラリの使用方法については、user1108125 によるこの回答を参照してください (これは使用したことがありません)。https://stackoverflow.com/a/8587166/1721136