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

  • Jordie Jordan

    Jordie Jorda

    27 Ocak 2008
  • pucksz

    pucksz

    24 Mart 2006
  • TheForgottenGamer1

    TheForgotten

    28 AĞUSTOS 2009