2

按下按钮后,我想显示一个图像(使用图片框),等待几秒钟,然后播放 mp3 声音,但我没有让它工作。要等待几秒钟,我使用System.Threading.Thread.Sleep(5000). 问题是,图像总是在等待时间之后出现,但我希望它先显示,然后等待,然后播放 mp3 ......我尝试使用WaitOnLoad = true但它不起作用,它应该先加载图像并继续阅读下一行代码?

这是我尝试过的代码(不起作用):

private void button1_Click(object sender, EventArgs e) {
    pictureBox1.WaitOnLoad = true;
    pictureBox1.Load("image.jpg");
    System.Threading.Thread.Sleep(5000);
    MessageBox.Show("test");//just to test, here should be the code to play the mp3
}

我还尝试使用“LoadAsync”加载图像并将代码等待并在“LoadCompleted”事件中播放 mp3,但这也不起作用......

4

3 回答 3

6

一旦加载图像,我将使用 LoadCompleted 事件并以 5 秒的间隔启动一个计时器,这样 UI 线程就不会被阻塞:

   private void button1_Click(object sender, EventArgs e)
    {
        pictureBox1.WaitOnLoad = false;
        pictureBox1.LoadCompleted += new AsyncCompletedEventHandler(pictureBox1_LoadCompleted);
        pictureBox1.LoadAsync("image.jpg");
    }

    void pictureBox1_LoadCompleted(object sender, AsyncCompletedEventArgs e)
    {
        //System.Timers.Timer is used as it supports multithreaded invocations
        System.Timers.Timer timer = new System.Timers.Timer(5000); 

        timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);

        //set this so that the timer is stopped once the elaplsed event is fired
        timer.AutoReset = false; 

        timer.Enabled = true;
    }

    void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        MessageBox.Show("test"); //just to test, here should be the code to play the mp3
    }
于 2010-01-23T13:15:17.127 回答
3

您是否尝试Application.DoEvents();过在等待时间之前使用?我相信这应该强制 C# 在睡觉前绘制图像。

于 2010-01-23T12:50:16.913 回答
2

它在application.doevents()使用时起作用。

private void button1_Click(object sender, EventArgs e) 
{
    pictureBox1.Load("image.jpg");
    Application.DoEvents();
    pictureBox1.WaitOnLoad = true;
    System.Threading.Thread.Sleep(5000);
    MessageBox.Show("test"); //just to test, here should be the code to play the mp3
}
于 2010-05-05T08:12:15.947 回答