2010-12-07 6 views
1

私はあなたの助けを前もって感謝します。私はかなりプログラミングに新しいので、簡単に私に行く。今はUIスレッドの外で実行する必要がある時間がかかるループがあります。これはUpdate()がプログレスバーを更新するので、このループが完了するまでは起こりません。私はいくつかの短いスレッドチュートリアルを見てきました。大きなループが終了するまで更新はレンダリングされません。コードのセクションを別のスレッドに配置していますか?

private void Button_Convert_Click(object sender, RoutedEventArgs e) 
{ 
MachineAngleCalculations.Instance.Arm1Length_Arbitrary = 12; 
MachineAngleCalculations.Instance.Arm2Length_Arbitrary = 11; 

int resolution = 100000; //points per shape 
double xstep, ystep, x, y; 

int totalpoints = resolution * ShapeList.Count; 
int calculatedpoints = 0; 
ProgStat.Update(calculatedpoints, totalpoints, "Calculated", "individual instructions."); 

InstructionList.Clear(); 

foreach (MachineLine item in ShapeList) 
{ 
    xstep = (item.End.X - item.Start.X)/(resolution - 1); 
    ystep = (item.End.Y - item.Start.Y)/(resolution - 1); 

    for (int i = 0; i < resolution; i++) 
    { 
    x = item.Start.X + xstep * i; 
    y = item.Start.Y + ystep * i; 
    InstructionList.Add(MachineAngleCalculations.Instance.XYtoMachineInstrution(x, y, 1)); 
    calculatedpoints += 1; 
    ProgStat.Update(calculatedpoints, totalpoints, "Calculated", "individual instructions."); 
    } 
} 
} 

だから、別のスレッドでforeachループを実行する最も簡単な方法は何ですか? これを別の機能に入れないで行う方法はありますか?

+0

http://stackoverflow.com/questions/670510/threading-in-net –

答えて

0

シンプルなソリューションのBackgroundWorkerクラスを使用することになります

+0

あなたはそれを新しい機能に入れないで行う方法を教えてもらえますか? –

+1

@Adam S - 定義した関数ごとにお金を払わなければならない奇妙なコンパイラを使用していますか? :-P –

+0

私がこれを避けたいのは、それが別の関数にある場合、その関数はButton_Convert_Clickで定義された変数にアクセスすることができないからです。 –

1

あなたは試すことができます(!!史上最高のチュートリアル)

Asynchronous Method Invocationプログラミング

Aynchronousを

背景ワーカー

BackgroundWorker Class Sample for Beginners

+0

このチュートリアルでは "MethodInvoker"とは何ですか?彼はそれを16回言及し、決してそれを一度も定義しない。 –

+0

パラメータと戻り値の型を持たない関数を呼び出すために使用できる特別なデリゲートはvoidです。 –

関連する問題