我想从一个程序集创建一个对象实例,该程序集实现了我在Forms应用程序中定义的接口。我会在app启动时使用Activator.CreateInstance
创建此对象,并保留对它的应用程序级别引用。
在此应用程序中的某些时刻,我想调用此对象上的方法,而不使用Task.Run(() => IMyObject.DoSomeWork(someList, someList2))
来阻止主线程。我只是想做一个“火与忘记”的void方法调用,我不需要等待甚至注册回调。
应用程序是否在STA线程中运行会产生问题吗?我是否必须担心在主线程上实例化的对象的泄漏或过早收集以及任务闭包内的引用?我只打算阅读这些列表的内容,而不是修改它们。
答案 0 :(得分:1)
无需担心;一旦创建了委托,它引用的所有对象都将保留在内存中,至少在Task.Run
退出之前。 STA线程没有任何改变它的东西。
线程根本不考虑GC - 除了运行线程的所有堆栈都包含根对象。您可以根据需要交叉引用对象,也不会混淆GC。