这可能是一个nobraner,但我无法弄清楚。 我有这个函数将wav文件转换为mp3。我从我的button_click句柄调用它。问题是,当转换开始时,button_click处理程序中的其余代码继续,而转换发生在另一个线程中。
现在,我需要button_click句柄中的其余代码,所以继续尝试直到布尔值为true,这样我就知道转换是在其余代码继续之前完成的。
我尝试过使用Do While但似乎没有做到这一点。也许只是我而已..
答案 0 :(得分:5)
这是客户端应用程序吗?听起来像是BackgroundWorker的一个很棒的应用程序。
执行耗时的操作 在后台,创建一个 BackgroundWorker并监听事件 报告你的进展情况 你的操作和信号 操作完成。
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler
(bw_RunWorkerCompleted);
....
private void button1_Click(object sender, EventArgs e)
{
bw.RunWorkerAsync(filename);
}
static void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = (BackgroundWorker)sender;
string filename = (string)e.Argument;
e.Result = DoConversion(filename);
}
static void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
label.Text = "Done: " + e.Result.ToString();
DoSomethingWhenConversionComplete();
}
答案 1 :(得分:1)
这称为旋转等待,并不是完成任务的最佳方式:
// IsConversionComplete will be set by some other thread
while(!IsConversionComplete){
Thread.Sleep(100);
}
// carry on
更高效的解决方案需要像互斥锁一样的同步结构或使用事件。