2

到目前为止,我在单击 X 按钮时运行了此代码,但我不确定这是否是在退出时终止窗体上的线程的正确方法。

           Type t = this.GetType();
           foreach (PropertyInfo pi in t.GetProperties())
           {
                if (pi.GetType() == typeof(Thread))
                {
                    MethodInfo mi = pi.GetType().GetMethod("Abort");
                    mi.Invoke(null, new object[] {});
                }   
            }

我不断收到此错误:“已尝试释放正在使用的 RCW。RCW 正在活动线程或其他线程上使用。尝试释放正在使用的 RCW 可能会导致损坏或数据丢失。”

4

1 回答 1

3

显然,中止该特定线程不是正确的方法,异常告诉您。该消息显示您正在该线程上使用 COM 对象。也许像 Microsoft Excel 之类的东西?在工作线程上运行 COM 对象很麻烦,它们通常具有严格的线程要求。其中之一是它们不是线程安全的并且具有“公寓线程”亲和力。“无论如何,您对对象的所有方法调用都将在 UI 线程上运行”,这是一个昂贵的词。这使它变慢了,完全破坏了线程的优势。

无论如何,不​​要使用反射来找到你的线程,直接在你的类中使用线程字段。并确保以可控的方式关闭线程,而不是拉扯地毯。 该线程显示了一个示例。

于 2010-04-24T18:46:35.300 回答