C# 平行线程断开

C# 平行线程断开,c#,.net,multithreading,C#,.net,Multithreading,我写了一个非静态类 在这个类中,有一个非静态方法调用同一类的静态方法。 在这个静态方法中,在匿名方法(或lambda表达式…)中启动2个或多个不同的线程,这些方法独立地在一个非常大的数组上执行一些工作 这一切都很完美!!性能很好,没有问题 但是…还有一个公共静态属性受静态锁定对象保护…除了锁定此静态属性之外,我不会将其用于任何其他目的 所有这些看起来都是这样的: 公共类testClass { 私有易失性静态布尔处理; 私有静态只读对象lockObj=新对象(); 公共静态布尔处理 { 得到 {

我写了一个非静态类

在这个类中,有一个非静态方法调用同一类的静态方法。 在这个静态方法中,在匿名方法(或lambda表达式…)中启动2个或多个不同的线程,这些方法独立地在一个非常大的数组上执行一些工作

这一切都很完美!!性能很好,没有问题

但是…还有一个公共静态属性受静态锁定对象保护…除了锁定此静态属性之外,我不会将其用于任何其他目的

所有这些看起来都是这样的:

公共类testClass
{
私有易失性静态布尔处理;
私有静态只读对象lockObj=新对象();
公共静态布尔处理
{
得到
{
锁(lockObj)
{返回取消处理;}
}
设置
{
锁(lockObj)
{cancelProcessing=value;}
}
}
公共无效调用方法()
{
静态线程方法();
}
私有静态void staticThreadsMethods()
{
int parts=4;//数组部分
倒计时事件_倒计时=新倒计时事件(部分);
对于(int u=0;u
调用
callingMethod()
后,在
staticThreadsMethods()
中,与匿名委托(或lambda表达式)同时启动2个或4个或更多线程

现在,我真正无法理解的是:


当所有线程并行运行时,我是否从另一个线程更改属性
CancelProcessing
的值,尽管该属性未在线程中使用(它本应用于取消线程,但我始终有相同的错误/异常),我得到一个System.AccessViolationException,因为当我只更改属性值时,指向数组的不安全指针“无法取消引用…指针无效”(?),但除此之外什么也不做。。。。为什么会这样?

如果您使用的是.NET 4及更高版本,我建议您在计算绑定数组处理中使用任务而不是线程。使用CancellationTokenSource进行取消。
关于异常,它可能与数组处理有关,而不是bool或锁定。你必须透露更多关于数组处理的信息。

你可能想看看问题的结尾是否特别难以理解:你应该从正确陈述所有事实开始,然后在必要时参考相关事实提问。是的,你是对的。。。。下次我会考虑你的评论:谢谢你的回答(!!)——我知道任务和取消任务,但是我想先这样做,验证我的代码到目前为止。为了让它更简单。。。。也许你也能为Linux编写它。。。但你绝对正确!当我取消线程时,由于与类交互的窗体被关闭,因此对数组的引用将获得
null
,因此我得到此异常!!-非常感谢你,你救了我一天!:)