Добрый день! Столкнулся со следующей проблемой - в модуле скриптов реализовал функцию, обрабатывающую параметр, и вторую функцию, записывающую в файл эти параметры. Обе они выполняются в одном отдельном потоке. Но по какой то причине, функция записи записывает не конечные значения, которые должны быть после выполнения функции, а "почти" конечные, промежуточные. Думаю что проблема в синхронизации потоков.

Вот функции:

void linearTransform(uint paramsNum,double t,params object[]parameters){//триплеты из : имя переменной, мин.знач., максимальное знач.
if (parameters.Length/3!=paramsNum){
return ;
}
double []b=new double[paramsNum];
double []k=new double[paramsNum];
double []value=new double[paramsNum];
double t1=0,t2=t*1000;
//рассчет коэф. б
for(int i=0;i<paramsNum;i++){
b[i]=Convert.ToDouble(parameters[3*i+1]);
}
//рассчет коэф. к
for(int i=0;i<paramsNum;i++){
k[i]=(Convert.ToDouble(parameters[3*i+2])-b[i])/t2;
}
//в течение каждой сек. присваиваем у=кх+в
for(t1=0;t1<=t2;t1=t1+20){
for(int i=0;i<paramsNum;i++){
value[i]=k[i]*t1+b[i];
setValue(Convert.ToString(parameters[3*i]),value[i]);
}
//на последней итерации паузы быть не должно
if(t1!=t2){
Thread.Sleep(20);
}
}
}

public void writeParamsToReport(params object[] parameterNames){

using (FileStream fstream=new FileStream(@"C:\log.txt", FileMode.Append))
{
string time="\r\n";
for(int i=0;i<parameterNames.Length;i++){
time=time+Convert.ToString(parameterNames[i])+" = "
+Convert.ToString(getValue(Convert.ToString(parame terNames[i])))
+"\r\n";
}
byte[] text=System.Text.Encoding.Default.GetBytes(time);
fstream.Write(text,0,text.Length);
}
}

их вызов:
linearTransform(1,5,"Nгп",Convert.ToDouble(getValu e("Nгп")),1600);
writeParamsToReport("Nгп");

если между ними поставить Thread.Sleep(1000) то запись отрабатывает корректно. Но это не очень хорошее решение.

Помогите пожалуйста разобраться, заранее спасибо.