Winforms 类(C#)实例的新线程

Winforms 类(C#)实例的新线程,winforms,multithreading,c#-3.0,Winforms,Multithreading,C# 3.0,我有一个表单和几个由表单实例化的外部类(串口、文件访问) 1) 在自己的线程中运行外部类实例的最简单方法是什么 2) 窗体关闭时实例的线程是否自动终止?如果只是要异步调用的几行代码,最好的方法可能是ThreadPool.QueueUserWorkItem。请参阅:查看您是否正在使用托管环境,当对象被实例化时,如果对象超出范围,它将自动释放。垃圾处理实际上是由垃圾收集来完成的 如果您使用的是非托管对象,则您有责任在使对象超出范围之前关闭资源 垃圾收集会定期打开并开始收集所有超出范围的对象。如果需要

我有一个表单和几个由表单实例化的外部类(串口、文件访问)

1) 在自己的线程中运行外部类实例的最简单方法是什么


2) 窗体关闭时实例的线程是否自动终止?

如果只是要异步调用的几行代码,最好的方法可能是ThreadPool.QueueUserWorkItem。请参阅:

查看您是否正在使用托管环境,当对象被实例化时,如果对象超出范围,它将自动释放。垃圾处理实际上是由垃圾收集来完成的

如果您使用的是非托管对象,则您有责任在使对象超出范围之前关闭资源

垃圾收集会定期打开并开始收集所有超出范围的对象。如果需要处理大型对象,可以尝试使用WeakReference类,该类将保存该对象,但也会将其公开以进行垃圾收集

从这里阅读WeakReference和垃圾收集:

我希望这对你有帮助

1) 在自己的线程中运行外部类实例的最简单方法是什么

类的实例不“运行”。方法可以

因此,您可能需要查看和类

2) 窗体关闭时实例的线程是否自动终止


这取决于线程是如何启动的。线程可以是线程或前台线程-前台线程阻止应用程序终止。

类实例(对象)不在线程上运行。他们的方法可以,并且可以同时在多个线程上运行。这是自动发生的,还是我必须将这些方法设置为在多个线程上运行?表单Main()具有STAThread method属性,那么表单中的所有方法都在单个线程中运行吗?原因在窗体中使用Thread.Sleep将冻结它。关于STAThread:“COM线程模型仅适用于使用COM互操作的应用程序。在不使用COM互操作的应用程序中使用此属性无效。”
“窗体中的所有方法是否都在单个线程中运行?”
很好,默认行为是在专用UI线程上处理事件(该线程也执行windows消息泵送)。如果在此线程上执行一些长操作,消息泵送将停止,因此窗口将无响应。另请看乔恩·斯基特:我不认为这是我想要的,而且这些课程可以根据需要大到什么程度。我正在寻找一种从父窗体启动异步实例并在窗体关闭时终止它们的简单方法。不确定这是否适用于第二个问题,即自动终止从窗体启动的线程。无论您在哪个线程中,垃圾收集都会在所有线程上工作,或者不考虑线程。当表单关闭时,您可以显式地将实例变量设置为null,以使它们可用于垃圾收集。