Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ada banyak operasi yang umum dilakukan yang dapat memakan waktu lama untuk dijalankan. Contohnya:
Unduhan gambar
Pemanggilan layanan web
Unduhan dan unggahan file (termasuk untuk aplikasi peer-to-peer)
Komputasi lokal yang kompleks
Transaksi database
Akses disk lokal, mengingat kecepatan lambatnya relatif terhadap akses memori
Operasi seperti ini dapat menyebabkan antarmuka pengguna Anda terkunci sementara saat berjalan. Ketika Anda menginginkan UI responsif dan Anda dihadapkan dengan penundaan panjang yang terkait dengan operasi tersebut, komponen BackgroundWorker menyediakan solusi yang nyaman.
Komponen BackgroundWorker memberi Anda kemampuan untuk menjalankan operasi yang memakan waktu secara asinkron ("di latar belakang"), pada utas yang berbeda dari utas UI utama aplikasi Anda. Untuk menggunakan BackgroundWorker, Anda cukup memberi tahu metode pekerja yang memakan waktu apa untuk dijalankan di latar belakang, dan kemudian Anda memanggil metode RunWorkerAsync. Thread panggilan Anda terus berfungsi normal saat fungsi pekerja berjalan secara asinkron. Setelah metode selesai, BackgroundWorker memperingatkan utas panggilan dengan menembakkan peristiwa RunWorkerCompleted, yang secara opsional berisi hasil operasi.
Komponen
Untuk memulai operasi asinkron Anda, gunakan metode RunWorkerAsync.
RunWorkerAsync mengambil parameter object opsional, yang dapat digunakan untuk meneruskan argumen ke metode pekerja Anda. Kelas BackgroundWorker mengekspos event DoWork, di mana utas pekerja Anda ditautkan melalui pengendali event DoWork.
Penanganan aktivitas DoWork mengambil parameter DoWorkEventArgs, yang memiliki properti Argument. Properti ini menerima parameter dari RunWorkerAsync dan dapat diteruskan ke metode pekerja Anda, yang akan dipanggil di penanganan aktivitas DoWork. Contoh berikut menunjukkan cara menetapkan hasil dari metode kerja yang disebut ComputeFibonacci. Ini adalah bagian dari contoh yang lebih besar, yang dapat Anda temukan di Cara: Menerapkan Formulir yang Menggunakan Operasi Latar Belakang.
// This event handler is where the actual,
// potentially time-consuming work is done.
void backgroundWorker1_DoWork( Object^ sender, DoWorkEventArgs^ e )
{
// Get the BackgroundWorker that raised this event.
BackgroundWorker^ worker = dynamic_cast<BackgroundWorker^>(sender);
// Assign the result of the computation
// to the Result property of the DoWorkEventArgs
// object. This is will be available to the
// RunWorkerCompleted eventhandler.
e->Result = ComputeFibonacci( safe_cast<Int32>(e->Argument), worker, e );
}
// This event handler is where the actual,
// potentially time-consuming work is done.
private void backgroundWorker1_DoWork(object sender,
DoWorkEventArgs e)
{
// Get the BackgroundWorker that raised this event.
BackgroundWorker worker = sender as BackgroundWorker;
// Assign the result of the computation
// to the Result property of the DoWorkEventArgs
// object. This is will be available to the
// RunWorkerCompleted eventhandler.
e.Result = ComputeFibonacci((int)e.Argument, worker, e);
}
' This event handler is where the actual work is done.
Private Sub backgroundWorker1_DoWork( _
ByVal sender As Object, _
ByVal e As DoWorkEventArgs) _
Handles backgroundWorker1.DoWork
' Get the BackgroundWorker object that raised this event.
Dim worker As BackgroundWorker = _
CType(sender, BackgroundWorker)
' Assign the result of the computation
' to the Result property of the DoWorkEventArgs
' object. This is will be available to the
' RunWorkerCompleted eventhandler.
e.Result = ComputeFibonacci(e.Argument, worker, e)
End Sub
Untuk informasi selengkapnya tentang menggunakan penanganan aktivitas, lihat Peristiwa.
Perhatian
Saat menggunakan multithreading dalam bentuk apa pun, Anda berpotensi mengekspos diri Anda ke bug yang sangat serius dan kompleks. Lihat praktik terbaik Managed Threading sebelum menerapkan solusi apa pun yang menggunakan multithreading.
Untuk informasi selengkapnya tentang menggunakan kelas BackgroundWorker, lihat Cara: Menjalankan Operasi di latar belakang.
Lihat juga
.NET Desktop feedback