SORU
12 Aralık 2008, Cuma


Nasıl yeni bir iş parçacığı kod basit bir bit çalıştırabilirim?

Şu anda formu kod çalışır iken donmasına neden olarak GUİ daha farklı bir iş parçacığı çalıştırmak için gereken kodu biraz (10 saniye kadar) var.

Daha önce hiç yeni bir konu yarattım; ne C bunu yapmak için ne kadar basit/temel bir örnek olarak kabul# ve kullanarak .NET 2.0 Çerçeve ya sonra?

CEVAP
27 Ocak 2009, Salı


BackgroundWorker senin için en iyi seçim gibi gözüküyor.

Burada en az benim örnek. Düğmesine tıkladıktan sonra arka planda çalışan arka plan iş parçacığı çalışmaya başlar ve aynı zamanda ilerleme aynı anda bildirir. Ayrıca bu çalışma tamamlandıktan sonra rapor verecek.

using System.ComponentModel;
...
    private void button1_Click(object sender, EventArgs e)
    {
        BackgroundWorker bw = new BackgroundWorker();

        // this allows our worker to report progress during work
        bw.WorkerReportsProgress = true;

        // what to do in the background thread
        bw.DoWork  = new DoWorkEventHandler(
        delegate(object o, DoWorkEventArgs args)
        {
            BackgroundWorker b = o as BackgroundWorker;

            // do some simple processing for 10 seconds
            for (int i = 1; i <= 10; i  )
            {
                // report the progress in percent
                b.ReportProgress(i * 10);
                Thread.Sleep(1000);
            }

        });

        // what to do when progress changed (update the progress bar for example)
        bw.ProgressChanged  = new ProgressChangedEventHandler(
        delegate(object o, ProgressChangedEventArgs args)
        {
            label1.Text = string.Format("{0}% Completed", args.ProgressPercentage);
        });

        // what to do when worker completes its task (notify the user)
        bw.RunWorkerCompleted  = new RunWorkerCompletedEventHandler(
        delegate(object o, RunWorkerCompletedEventArgs args)
        {
            label1.Text = "Finished!";
        });

        bw.RunWorkerAsync();
    }

Not:

  • Tek bir yöntem her şeyi koydum C#'nin isimsiz yöntemi basitlik her zaman çekebilirsin ama farklı yöntemleri onları.
  • Güvenli GUI içinde güncelleme 3* *ya RunWorkerCompleted işleyicileri. Ancak, *5 GUI güncelleniyor* neden olur InvalidOperationException.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • adrianisen

    adrianisen

    25 Kasım 2009
  • HTC

    HTC

    12 Ocak 2006
  • Jonathan D.

    Jonathan D.

    3 Kasım 2006