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 olurInvalidOperationException
.
Bunu Paylaş:
Nasıl bir çalışan iş parçacığı sabit b...
Nasıl yeni bir Git deposuna tarihi ile...
Nasıl bir karakter yerine Vim bir yeni...
Nasıl bir yeni satır (\n) sed kullanar...
Nasıl baskı yeni satır veya boşluk olm...