Aracılığıyla paylaş


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

  1. Formunuzda bileşenin PictureBox bir örneğini oluşturun.

  2. 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
    
  3. Formunuza ve cancelLoadButtonadlı 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
    
  4. 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.

Ayrıca bkz.