Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Abort()在窗体退出时中止线程_C#_Multithreading_Termination - Fatal编程技术网

C#Abort()在窗体退出时中止线程

C#Abort()在窗体退出时中止线程,c#,multithreading,termination,C#,Multithreading,Termination,到目前为止,我已经在单击X按钮时运行了这段代码,但我不确定这是否是在退出时终止窗体上线程的正确方法 Type t = this.GetType(); foreach (PropertyInfo pi in t.GetProperties()) { if (pi.GetType() == typeof(Thread)) { Met

到目前为止,我已经在单击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可能会导致损坏或数据丢失。”

显然,中止该特定线程不是正确的方法,异常会告诉您这一点。该消息显示您正在该线程上使用COM对象。也许是微软Excel之类的软件?在辅助线程上运行COM对象很麻烦,它们通常有严格的线程要求。其中之一是它们不是线程安全的,并且具有“单元线程”的亲和力。“所有对对象的方法调用都将在UI线程上运行”,这是一个昂贵的词。这使得它速度变慢,完全破坏了线程的优势


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

我一直想知道为什么最小化窗口时速度总是更快。COM对象是一个flash游戏,每当我在GUI线程上运行无限循环时,游戏就会冻结,所以我在不同的线程上运行循环。