SORU
13 Kasım 2009, Cuma


Nasıl bir Form'nin Kapatılması olayı BackgroundWorker durdurmak için?

Bir BackgroundWorker olarak çoğaltılır, formun kendi textbox (ana iş parçacığı), dolayısıyla güncelleme gereken bir form var Invoke((Action) (...)); Ara.
HandleClosingEvent sadece bgWorker.CancelAsync() Daha sonra Invoke(...) çağrı ObjectDisposedException, anlaşılır olsun. Ama eğer HandleClosingEvent ben oturabilir ve bgWorker için yapılması gereken, daha bekleyin .(...) Çağırmak asla geri dönmez, aynı zamanda anlaşılır.

Fikirler nasıl istisna veya kilitlenme olmadan bu uygulamayı kapatırım?

Aşağıdaki basit Form1 Sınıfı 3 ilgili yöntemleri:

    public Form1() {
        InitializeComponent();
        Closing  = HandleClosingEvent;
        this.bgWorker.RunWorkerAsync();
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
        while (!this.bgWorker.CancellationPending) {
            Invoke((Action) (() => { this.textBox1.Text = Environment.TickCount.ToString(); }));
        }
    }

    private void HandleClosingEvent(object sender, CancelEventArgs e) {
        this.bgWorker.CancelAsync();
        /////// while (this.bgWorker.CancellationPending) {} // deadlock
    }

CEVAP
13 Kasım 2009, Cuma


Biliyorum ki bunu yapmak için kilitlenme-güvenli ve güvenli istisna-tek yol aslında FormClosing olayını iptal etmek. E ayarlayın.Gerçek BGW hala çalışıyor ve kullanıcın yakın bir talep olduğunu belirtmek için ayarlamak = iptal. Eğer ayarlanırsa. sonra BGW. RunWorkerCompleted olay işleyicisi o bayrağı kontrol edin ve Kapatın() çağrı

protected override void OnFormClosing(FormClosingEventArgs e) {
    if (!mCompleted) {
        backgroundWorker1.CancelAsync();
        this.Enabled = false;
        e.Cancel = true;
        mClosePending = true;
        return;
    }
    base.OnFormClosing(e);
}

void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
    mCompleted = true;
    if (mClosePending) this.Close();
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ASUS Campus Life

    ASUS Campus

    18 Mart 2013
  • hans peder sahl

    hans peder s

    22 Temmuz 2009
  • J Medema

    J Medema

    11 EKİM 2006