Nasıl yapılır: Olay Tabanlı Zaman Uyumsuz Deseni Destekleyen Bileşenleri Kullanma
Birçok bileşen, çalışmalarını zaman uyumsuz olarak gerçekleştirme seçeneği sunar. SoundPlayer Örneğin ve PictureBox bileşenleri, ana iş parçacığınız kesintisiz çalışmaya devam ederken sesleri ve görüntüleri "arka planda" yüklemenize olanak tanır.
Olay Tabanlı Zaman Uyumsuz Desene Genel Bakış'ı destekleyen bir sınıfta zaman uyumsuz yöntemler kullanmak, diğer tüm olaylarda yaptığınız gibi bileşenin MethodNameCompleted olayına bir olay işleyicisi eklemek kadar basit olabilir. MethodName Async yöntemini çağırdığınızda, MethodNameCompleted olayı tetiklenene kadar uygulamanız kesintisiz çalışmaya devam eder. Olay işleyicinizde, zaman uyumsuz işlemin başarıyla tamamlandığını veya iptal edilmiş olup olmadığını belirlemek için parametresini inceleyebilirsiniz AsyncCompletedEventArgs .
Olay işleyicilerini kullanma hakkında daha fazla bilgi için bkz . Olay İşleyicilerine Genel Bakış.
Aşağıdaki yordamda bir denetimin zaman uyumsuz görüntü yükleme özelliğinin nasıl kullanılacağı gösterilmektedir PictureBox .
PictureBox denetiminin bir görüntüyü zaman uyumsuz olarak yüklemesini etkinleştirmek için
Formunuzda bileşenin PictureBox bir örneğini oluşturun.
Olaya bir olay işleyicisi atayın LoadCompleted .
Zaman uyumsuz indirme sırasında oluşan hataları buradan denetleyin. Ayrıca iptal olup olmadığını kontrol ettiğiniz yer de burasıdır.
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
Formunuza ve
cancelLoadButton
adlıloadButton
iki düğme ekleyin. İndirmeyi başlatmak ve iptal etmek için olay işleyicileri ekleyin 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
Uygulamanızı çalıştırın.
Görüntü indirme işlemi devam ederken formu serbestçe taşıyabilir, simge durumuna küçültebilir ve ekranı kaplayabilirsiniz.