これは私に苦労しています。 事は、私がMIDIにいくつかのメモを果たしているコードを持っているということである、と私はそれを一時停止できるようにしたかったので、私はこのような簡単なフォーム製:Windowsフォームで(効果的に)マルチスレッド化できますか?
namespace Music
{
public partial class Form1 : Form
{
static BackgroundWorker _bw = new BackgroundWorker
{
WorkerSupportsCancellation = true
};
private void button1_Click(object sender, EventArgs e)
{
if (!Playing)
{
Playing = true;
_bw.DoWork += Start_Playing;
_bw.RunWorkerAsync("Hello to worker");
}
else
{
Playing = false;
_bw.CancelAsync();
}
}
static void Start_Playing(object sender, DoWorkEventArgs e)
{
//Plays some music
}
}
}
をそして、私がクリックしたときに、それが再生を開始し、しかし、私が何をしても、それは止まらない。しかし、問題は、コンソールで同じことをすると完璧に動作するということです。
私は何かを見逃しましたか? フォームから別のスレッドを制御するにはどうすればよいですか?
'CancelAsync()'メソッドは単に 'true'に' CancellationPending'プロパティを設定します。それは適切であると見なして、それを処理するのはワーカースレッドに任されています(通常は、定期的な間隔で保留中のキャンセルをチェックすることになります)。 – Ani