まずは、私は非常に熟練したプログラマーです。私は学士号プロジェクトのための簡単な音楽アプリの基盤を構築しています。私の質問は、整数値を1つ増やすことを意味する内部クロックメソッドに関するものです。BPM分。RichTextBox.Textを2秒に2回更新するスレッドは機能しません。
私はinternalClockクラスを作成しました:
public class internalClock
{
// THIS METHOD WILL BE CALLED WHEN THE THREAD IS STARTED
public static void clockMethod()
{
int BPM = 135;
int clockTick = 1;
Form1 clockForm = new Form1();
// infinite loop
while (true)
{
if (clockTick == 8)
{
clockTick = 1;
}
else
{
clockTick++;
}
clockForm.metrobox.Text = clockTick.ToString();
Thread.Sleep(60 * 1000/BPM);
}
}
}
これは、私は、リッチテキストボックス自体へのアクセスを得ることができた方法です:メインの 'Program.csの' I」で
public RichTextBox metrobox
{
get { return metroBox; }
set { metroBox = value; }
}
プログラムが終了するまでclockMethodを実行する別のスレッドを開始するためのものを記述しました。
// THREADING
// Create a thread
internalClock oClock = new internalClock();
Thread oClockThread = new Thread(new ThreadStart(internalClock.clockMethod));
// Start the internalClock thread
oClockThread.Start();
RichTextBox内のテキストを更新しないでください。また、別のスレッドを作成せずにclockMethod()を呼び出すと、アプリケーションがフリーズします。私のアマチュアの質問に申し訳ありません、私はちょうどC#(ええと、私のユニは役に立たない)で始まっています。私のコードで何が間違っていますか?
スレッド/無限ループを使用しないで、特別なクラスがあります。 [**タイマー**](http://www.c-sharpcorner.com/UploadFile/mahesh/C-Sharp-timer/) – Eser
しかし、他の方法などと同時に作業することはできますか? – Yurieff
Timerクラスの基本的な使い方については、[ここ](https://msdn.microsoft.com/en-us/library/system.timers.timer.elapsed(v = vs.110).aspx)を参照してくださいTimer.Elapsedを使用します(これはあなたが望むものです)。編集:Eserによって提供された前のリンクは本質的に同じ情報を持っています。 – pay