【发布时间】:2026-01-22 07:30:01
【问题描述】:
这个让我很难受。 问题是我有一个在 MIDI 中播放一些音符的代码,我希望能够暂停它,所以我做了一个这样的简单表单:
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()方法只是将CancellationPending属性设置为true。由工作线程来处理它(很可能是通过定期检查挂起的取消),因为它认为合适。
标签: c# .net winforms multithreading backgroundworker