C# UWP/C在哪个线程上调用终结器#
我在singleton类中有一个MediaPlayer实例。类作为单例实例通过autofact注入消费者C# UWP/C在哪个线程上调用终结器#,c#,uwp,garbage-collection,finalizer,C#,Uwp,Garbage Collection,Finalizer,我在singleton类中有一个MediaPlayer实例。类作为单例实例通过autofact注入消费者 公共类SMTCControl { 私人媒体播放器; ~SMTCControl() { corespatcher.TryRunAsync(corespatcherpriority.Normal,()=> { mediaPlayer.Dispose(); mediaPlayer=null; }); } 公共SMTCControl() { corespatcher.TryRunAsync(core
公共类SMTCControl
{
私人媒体播放器;
~SMTCControl()
{
corespatcher.TryRunAsync(corespatcherpriority.Normal,()=>
{
mediaPlayer.Dispose();
mediaPlayer=null;
});
}
公共SMTCControl()
{
corespatcher.TryRunAsync(corespatcherpriority.Normal,()=>
{
mediaPlayer=新的mediaPlayer();
});
}
公共IMediplayBacksource源
{
get=>mediaPlayer.Source;
set=>mediaPlayer.Source=value;
}
public MediaPlaybackCommandManager CommandManager=>mediaPlayer.CommandManager;
公共系统MediaTransportControls SystemMediaTransportControls=>
mediaPlayer.SystemMediaTransportControls;
}
SMTC有一个bug,如果我创建并处理这个非UI线程,它会泄漏内存
所以我使用了corespatcher.TryRunAsync(corespatcherpriority.Normal,handler)
初始化并释放mediaplayer
如果我使用corespatcher.TryRunAsync(corespatcherpriority.Normal,handler)
在终结器中处置对象,然后它会导致新任务在UI线程中排队,但类的终结器已退出调用,因为TryRunAsync将运行到不同的线程
我的问题是:
相关:一个要点是,您不能总是依赖于在程序结束时运行的垃圾收集器。NET5是.NETCore的成功者,与.NETFramework不同,它可能不会继续这样做。随着Windows特定的UI技术在.NET Core上得到支持,这可能也会与UWP相关。相关:一个好处是,您不能总是依赖程序末尾运行的垃圾收集器。NET5是.NETCore的成功者,与.NETFramework不同,它可能不会继续这样做。随着特定于Windows的UI技术在.NET Core上得到支持,这也可能与UWP相关。