我在单例类中有一个MediaPlayer实例。类是通过自动事实作为单例实例注入到消费者的。
public class SMTCControl
{
private MediaPlayer mediaPlayer;
~SMTCControl ()
{
coreDispatcher.TryRunAsync(CoreDispatcherPriority.Normal, ()=>
{
mediaPlayer.Dispose();
mediaPlayer = null;
});
}
public SMTCControl ()
{
coreDispatcher.TryRunAsync(CoreDispatcherPriority.Normal, ()=>
{
mediaPlayer = new MediaPlayer();
});
}
public IMediaPlaybackSource Source
{
get => mediaPlayer.Source;
set => mediaPlayer.Source = value;
}
public MediaPlaybackCommandManager CommandManager => mediaPlayer.CommandManager;
public SystemMediaTransportControls SystemMediaTransportControls =>
mediaPlayer.SystemMediaTransportControls;
}
SMTC有一个错误,即如果我创建并处理UI线程以外的其他问题,则会泄漏内存。
所以我用coreDispatcher.TryRunAsync(CoreDispatcherPriority.Normal, handler);
来初始化和配置媒体播放器。
如果我在终结器中使用coreDispatcher.TryRunAsync(CoreDispatcherPriority.Normal, handler);
来放置对象,则它将导致新任务在UI线程中排队,但是类的终结器已退出调用,因为TryRunAsync将运行到其他线程中。
我的问题是: