文字列からconsole.beepを使用して音楽を再生する小さなWindowsフォームプログラムがあります。新しいスレッド「t」に設定された文字列再生ビット(基本的に文字ごとに文字列を通過し、適切な音符を再生する for ループ)があります。「再生」ボタンを押すと、スレッドが開始され、ボタンが「停止」ボタンに変わります。音楽の再生中にこの「停止」ボタンを押すと、音楽が停止し、ボタンが再生に戻ります (「終了」メソッドを呼び出すことによって)。私の問題は、新しいスレッドで実行されているループに、ループがコースを実行し、曲が終わったときの「終了」メソッドしかし、ループの後にfinished()を置くと、「非静的フィールドにはオブジェクト参照が必要です」というエラーが表示されます。
ボタンを押したときのコードは次のとおりです...
//This is the method for when the "start" button is clicked
public void button1_Click(object sender, EventArgs e)
{
if (music == null) { return; }
if (button1.Text == "Play")
{
// it makes a new thread which calls my "parse" method which
// interprets the music and then calls "playnote" to play it.
Thread t = new Thread(parse);
t.Start();
button1.Text = "Stop";
}
else
{
finished();
}
}
public void finished()
{
stop = true;
button1.Text = "Play";
}
助言がありますか?
よろしくお願いします!
編集:ありがとうございました!! バックグラウンド ワーカーの ATM を理解する時間がないので、今は開始ボタンと停止ボタンを別々に用意しています。:p