私は、10^20より小さい数値の素因数分解を計算するWindowsフォームアプリケーションを作成しようとしています。しかし、10^12より大きい数字の場合、アプリは結果を出す前に数秒間フリーズし始めます。だから私は別々に答えを計算するスレッドを作成しようとしました。コードは次のとおりです。入力を読み取っている間に計算するウィンドウフォームアプリケーション
class fact
{
static long[] res = new long[202];
static long num;
public static string output;
static void calcFact(long n)
{
//calculate prime factorization into array res
}
static void call()
{
calcFact(s);
}
public static void execute(string input)
{
s = long.Parse(input);
ThreadStart childref = new ThreadStart(call);
Thread childThread = new Thread(childref);
childThread.Start();
for (int i = 0; i < len; i++) output += res[i].ToString() + " ";
}
}
private void InputBox_TextChanged(object sender, EventArgs e)
{
if (InputBox.Text != "")
{
fact.execute(InputBox.Text);
output.Text = fact.output;
}
}
新しいスレッドを作成しないと、アプリケーションは動作しますが、出力は常に空になります。誰かがどのようにこのスレッドを実行し、それを修正する方法を説明することができますか?
'BackgroundWorker'、特に' RunWorkerCompleted'を読んでください。 – mjwills
数字が大きすぎるとバックグラウンド計算が実用的にならないという事実に対処しなければなりません。スレッドを停止して再起動しようとすると、競合状態に苦しんでいる多くの問題が発生します。単純なままで、値が十分に小さいときはすぐに結果を計算し、そうでないときは「計算」ボタンを表示させます。 –