作法:使用支援事件架構非同步模式的元件

許多元件可讓您選擇以非同步方式執行其工作。 例如,SoundPlayerPictureBox 元件可讓您「在背景」載入音效和影像,同時主執行緒會繼續執行而不中斷。

對支援事件架構非同步模式概觀的類別使用非同步方法,就像處理其他任何事件一樣簡單,只要將事件處理常式附加到元件的 MethodNameCompleted 事件即可。 當您呼叫 MethodNameAsync 方法時,應用程式將會繼續執行而不中斷,直到引發 MethodNameCompleted 事件為止。 在事件處理常式中,您可以檢查 AsyncCompletedEventArgs 參數來判斷非同步作業已成功完成或已取消。

如需使用事件處理常式的詳細資訊,請參閱事件處理常式概觀

下列程序示範如何使用 PictureBox 控制項的非同步影像載入功能。

啟用 PictureBox 控制項以非同步方式載入影像

  1. 建立表單中 PictureBox 元件的執行個體。

  2. 將事件處理常式指派給 LoadCompleted

    請檢查非同步下載期間是否發生任何任何錯誤。 您也可在此時檢查取消。

    public Form1()
    {
        InitializeComponent();
    
        this.pictureBox1.LoadCompleted +=
            new System.ComponentModel.AsyncCompletedEventHandler(this.pictureBox1_LoadCompleted);
    }
    
    Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox
    
    private void pictureBox1_LoadCompleted(object sender, AsyncCompletedEventArgs e)
    {
        if (e.Error != null)
        {
            MessageBox.Show(e.Error.Message, "Load Error");
        }
        else if (e.Cancelled)
        {
            MessageBox.Show("Load canceled", "Canceled");
        }
        else
        {
            MessageBox.Show("Load completed", "Completed");
        }
    }
    
    Private Sub PictureBox1_LoadCompleted( _
        ByVal sender As System.Object, _
        ByVal e As System.ComponentModel.AsyncCompletedEventArgs) _
        Handles PictureBox1.LoadCompleted
    
        If (e.Error IsNot Nothing) Then
            MessageBox.Show(e.Error.Message, "Load Error")
        ElseIf e.Cancelled Then
            MessageBox.Show("Load cancelled", "Canceled")
        Else
            MessageBox.Show("Load completed", "Completed")
        End If
    
    End Sub
    
  3. 將稱為 loadButtoncancelLoadButton 的兩個按鈕加入至表單。 新增 Click 事件處理常式,以啟動和取消下載。

    private void loadButton_Click(object sender, EventArgs e)
    {
        // Replace with a real url.
        pictureBox1.LoadAsync("https://unsplash.com/photos/qhixfmpqN8s/download?force=true&w=1920");
    }
    
    Private Sub loadButton_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles loadButton.Click
    
        ' Replace with a real url.
        PictureBox1.LoadAsync("https://unsplash.com/photos/qhixfmpqN8s/download?force=true&w=1920")
    
    End Sub
    
    private void cancelLoadButton_Click(object sender, EventArgs e)
    {
        pictureBox1.CancelAsync();
    }
    
    Private Sub cancelLoadButton_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles cancelLoadButton.Click
    
        PictureBox1.CancelAsync()
    
    End Sub
    
  4. 執行應用程式。

    在進行影像下載時,您可以隨意移動表單、將它縮至最小以及最大化。

另請參閱