尝试使用codesnippet直到condition为True

时间:2009-11-01 21:36:06

标签: c# vb.net

这可能是一个nobraner,但我无法弄清楚。 我有这个函数将wav文件转换为mp3。我从我的button_click句柄调用它。问题是,当转换开始时,button_click处理程序中的其余代码继续,而转换发生在另一个线程中。

现在,我需要button_click句柄中的其余代码,所以继续尝试直到布尔值为true,这样我就知道转换是在其余代码继续之前完成的。

我尝试过使用Do While但似乎没有做到这一点。也许只是我而已..

2 个答案:

答案 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

更高效的解决方案需要像互斥锁一样的同步结构或使用事件。