Здравствуйте, есть программа, рассчитывающая траекторию объекта. Из-за долгого расчета использовал Parallel.For, но программа стала просто закрываться (чаще всего без ошибки). Кто знает в чем ошибка?
private void выполнитьРасчетToolStripMenuItem1_Click(object sender, EventArgs e)
{
//System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
Random rand = new Random();
var ob = new object();
var before = DateTime.Now;
List = new List<double[]>();
Parallel.For(0, Prec, val =>
{
double b;
double c;
double d = 0;//theta1
double m = 0;//phi1
double f = 0;
double g = 0;//theta2
double h = 0;//phi2
double i1 = 0;
double k = 0;
int l = 0;
for (b = rand.Next() % 900 / 10.0, c = rand.Next() % 3600 / 10.0; (Math.Abs(c - 180.0) / 180.0 > Math.Sin(b * Math.PI / 180.0)); b = rand.Next() % 900 / 10.0, c = rand.Next() % 3600 / 10.0) ;
c = 180.0 + (c - 180.0) / Math.Sin(b * Math.PI / 180.0);
dllsub(ref A, ref b, ref c, out d, out m, out f, out g, out h, out i1, out k, out l);
if (g > ThetaO - Aamp && g < ThetaO + Aamp)
{
lock (List)
{
List.Add(project(d, m, g, h, A, f, h));
}
}
});
double mit = MinT(List);
for (int i = 0; i < List.Count; i++) List[i][2] = Time(List[i][3], List[i][2] - mit, A);
List.Sort(new QuantComparer());
this.Refresh();
foreach (double[] a1 in DrawL) richTextBox1.Text = richTextBox1.Text + (int)Math.Round(a1[0]) + "\t" + (int)Math.Round(a1[1]) + "\t" + Math.Round(a1[2]) + "\n";
}
Иногда выскакивает такая ошибка: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
В окне вывода пишет все непонятное, кроме этого: The program '[7132] WindowsFormsApplication2.vshost.exe: Managed (v4.0.30319)' has exited with code 127 (0x7f).
dllsub - процедура на fortran'e, с помощью которой мы получаем координаты тела. Их мы записываем в список.