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

  • Major FX

    Major FX

    6 HAZİRAN 2012
  • pain975

    pain975

    27 NİSAN 2008
  • Tina Chen

    Tina Chen

    26 Mayıs 2012