許多元件可讓您選擇以非同步方式執行其工作。 例如,SoundPlayer 和 PictureBox 元件可讓您「在背景」載入音效和影像,同時主執行緒會繼續執行而不中斷。
對支援事件架構非同步模式概觀的類別使用非同步方法,就像處理其他任何事件一樣簡單,只要將事件處理常式附加到元件的 MethodNameCompleted 事件即可。 當您呼叫 MethodNameAsync 方法時,應用程式將會繼續執行而不中斷,直到引發 MethodNameCompleted 事件為止。 在事件處理常式中,您可以檢查 AsyncCompletedEventArgs 參數來判斷非同步作業已成功完成或已取消。
如需使用事件處理常式的詳細資訊,請參閱事件處理常式概觀。
下列程序示範如何使用 PictureBox 控制項的非同步影像載入功能。
啟用 PictureBox 控制項以非同步方式載入影像
建立表單中 PictureBox 元件的執行個體。
將事件處理常式指派給 LoadCompleted。
請檢查非同步下載期間是否發生任何任何錯誤。 您也可在此時檢查取消。
public Form1() { InitializeComponent(); this.pictureBox1.LoadCompleted += new System.ComponentModel.AsyncCompletedEventHandler(this.pictureBox1_LoadCompleted); }Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBoxprivate 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將稱為
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 Subprivate 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執行應用程式。
在進行影像下載時,您可以隨意移動表單、將它縮至最小以及最大化。