方法 : イベントベースの非同期パターンをサポートするコンポーネントを使用する

大部分のコンポーネントは、非同期的に作業を行うオプションを提供します。 たとえば、SoundPlayer および PictureBox コンポーネントを使用すると、メイン スレッドを中断せずに実行したまま、サウンドおよびイメージを "バックグラウンド" で読み込むことができます。

イベントベースの非同期パターンの概要をサポートしているクラスで非同期メソッドを使用する方法は簡単で、コンポーネントの MethodNameCompleted イベントに対して、他のイベントの場合と同じようにイベント ハンドラーを割り当てるだけです。 MethodNameAsync メソッドを呼び出すと、MethodNameCompleted イベントが発生するまで、アプリケーションは中断されずに実行されます。 イベント ハンドラーで AsyncCompletedEventArgs パラメーターを調べると、非同期操作が正常に完了したか、キャンセルされたかを確認できます。

イベンド ハンドラーの使用方法の詳細については、「イベント ハンドラーの概要 (Windows フォーム)」を参照してください。

次の手順は、PictureBox コントロールの非同期イメージ読み込み機能を使用する方法を示しています。

PictureBox コントロールを有効にして、非同期的にイメージを読み込むには

  1. フォームで PictureBox コンポーネントのインスタンスを作成します。

  2. LoadCompleted イベントにイベント ハンドラーを割り当てます。

    ここで、非同期ダウンロード中に発生したエラーを確認します。 キャンセルも確認します。

    Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox
    
    public Form1()
    {
        InitializeComponent();
    
        this.pictureBox1.LoadCompleted += 
            new System.ComponentModel.AsyncCompletedEventHandler(this.pictureBox1_LoadCompleted);
    }
    
    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
    
    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");
        }
    }
    
  3. フォームに 2 つのボタン (loadButton および cancelLoadButton) を追加します。 Click イベント ハンドラーを追加して、ダウンロードを開始およびキャンセルします。

    Private Sub loadButton_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles loadButton.Click
    
        ' Replace with a real url.
        PictureBox1.LoadAsync("http://www.tailspintoys.com/image.jpg")
    
    End Sub
    
    private void loadButton_Click(object sender, EventArgs e)
    {
        // Replace with a real url.
        pictureBox1.LoadAsync("http://www.tailspintoys.com/image.jpg");
    }
    
    Private Sub cancelLoadButton_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) _
        Handles cancelLoadButton.Click
    
        PictureBox1.CancelAsync()
    
    End Sub
    
    private void cancelLoadButton_Click(object sender, EventArgs e)
    {
        pictureBox1.CancelAsync();
    }
    
  4. アプリケーションを実行します。

    イメージのダウンロードの進行中には、フォームを自由に移動、最小化、最大化できます。

参照

処理手順

方法 : バックグラウンドで操作を実行する

概念

イベントベースの非同期パターンの概要

その他の技術情報

Visual Basic におけるマルチスレッド