Porady: używanie składnika obsługującego wzorzec asynchroniczny oparty na zdarzeniach
Wiele składników zapewnia możliwość asynchronicznego wykonywania pracy. Składniki SoundPlayer i PictureBox , na przykład, umożliwiają ładowanie dźwięków i obrazów "w tle", podczas gdy główny wątek nadal działa bez przerwy.
Używanie metod asynchronicznych w klasie obsługującej asynchroniczny wzorzec oparty na zdarzeniach — omówienie może być tak proste, jak dołączanie programu obsługi zdarzeń do zdarzenia MethodNameukończonegoskładnika, tak samo jak w przypadku dowolnego innego zdarzenia. Po wywołaniu metody MethodNameAsync aplikacja będzie nadal działać bez przerwy do momentu zgłoszenia zdarzenia MethodNameCompleted . W programie obsługi zdarzeń można sprawdzić AsyncCompletedEventArgs parametr, aby określić, czy operacja asynchroniczna została pomyślnie ukończona, czy została anulowana.
Aby uzyskać więcej informacji na temat korzystania z programów obsługi zdarzeń, zobacz Omówienie procedur obsługi zdarzeń.
Poniższa procedura przedstawia sposób użycia asynchronicznego możliwości ładowania obrazów kontrolki PictureBox .
Aby włączyć kontrolkę PictureBox do asynchronicznego ładowania obrazu
Utwórz wystąpienie składnika w formularzu PictureBox .
Przypisz program obsługi zdarzeń do LoadCompleted zdarzenia.
Sprawdź wszelkie błędy, które mogły wystąpić podczas asynchronicznego pobierania tutaj. Jest to również miejsce, w którym sprawdzasz anulowanie.
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
Dodaj dwa przyciski o nazwie
loadButton
icancelLoadButton
, do formularza. Dodaj Click programy obsługi zdarzeń, aby uruchomić i anulować pobieranie.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
Uruchom aplikację.
Podczas pobierania obrazu możesz swobodnie przenieść formularz, zminimalizować go i zmaksymalizować.