Здравствуйте, у меня возникла проблема с выполнением процессов в отдельных потоках. Необходимо передать объекты в поток, с целью провести определенные вычисления и изменить переданные объекты. Создаю пул потоков и получаю исключение System.NotSupportedException на WaitHandler.WaitAll.
Код | public static void fillSubPathIntersections() { int i = 0;
ManualResetEvent[] events = new ManualResetEvent[getFactorial(SegX.Instance.getPathListCount())];
for(int k = 0; k < SegX.Instance.getPathListCount(); k++) { Path pth1 = SegX.Instance.getFromPathList(k); for(int p = k + 1; p < SegX.Instance.getPathListCount(); p++) { Path pth2 = SegX.Instance.getFromPathList(p);
int cur = i; events[cur] = new ManualResetEvent(false); ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object newDelegate) { findIntersectBtwnTwoSubs(ref pth1, ref pth2, ref events[cur]); })); ++i; } } WaitHandle.WaitAll(events); }
private static void findIntersectBtwnTwoSubs(ref Path pth1,ref Path pth2, ref ManualResetEvent evnt) { lock (pth1) { lock (pth2) { Dictionary<int, SubPathA> sub1 = pth1.getSubListA(); Dictionary<int, SubPathA> sub2 = pth2.getSubListA();
foreach (KeyValuePair<int, SubPathA> i in sub1) foreach (KeyValuePair<int, SubPathA> j in sub2) { if (((SubPathA)(i.Value)).getSegmentSize != ((SubPathA)(j.Value)).getSegmentSize && ((SubPathA)(i.Value)).getDetLevel != ((SubPathA)(i.Value)).getDetLevel) continue; findSubPathIntersection(i.Value, j.Value); } } } evnt.Set(); }
|
Подскажите пожалуйста, в чем ошибка и как ее исправить? |