語言

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

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

對支援事件架構非同步模式概觀的類別使用非同步方法,就像處理其他任何事件一樣簡單,只要將事件處理常式附加到元件的 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. 將稱為 loadButton 和 cancelLoadButton 的兩個按鈕加入至表單。 新增 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. 執行應用程式。

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

另請參閱