Katakanlah saya ingin mengirim parameter int ke pekerja latar belakang, bagaimana ini bisa dilakukan?
private void worker_DoWork(object sender, DoWorkEventArgs e) {
}
Saya tahu ketika ini adalah worker.RunWorkerAsync () ;, Saya tidak mengerti bagaimana mendefinisikan di worker_DoWork bahwa itu harus mengambil parameter int.
c#
backgroundworker
sooprise
sumber
sumber
Tuple<A,B>
(C # 4 +) (Edit: Ya, gunakan objek untuk mengemas semuanya. Lihat misalnya DoWorkEventArgs sendiri).label1.Text = e.Result.ToString();
mana pun saya menandai itu sebagai aman.Meskipun ini adalah pertanyaan yang sudah dijawab, saya akan meninggalkan opsi lain bahwa IMO jauh lebih mudah dibaca:
Dan pada metode handler:
sumber
... => WorkerDoWork(a, b, c);
asalkan cocok dengan metode signature... WorkerDoWork(int a, string b, string c) {...
Anda dapat memberikan beberapa argumen seperti ini.
sumber
Tuple
(atau kelas khusus) daripada daftar objek generikAnda bisa menggunakan
DoWorkEventArgs.Argument
properti.Contoh lengkap (bahkan menggunakan argumen int) dapat ditemukan di situs Microsoft:
sumber
Check out DoWorkEventArgs.Argument Properti :
sumber
Anda dapat mencoba ini jika Anda ingin mengirimkan lebih dari satu jenis argumen, pertama-tama tambahkan semuanya ke array bertipe Objek dan meneruskan objek itu ke RunWorkerAsync () di sini adalah contoh:
Sekarang dalam metode pekerja latar belakang doWork
sumber
Anda memerlukan metode RunWorkerAsync (objek) dan properti DoWorkEventArgs.Argument .
sumber
Anda harus selalu mencoba menggunakan objek komposit dengan jenis beton (menggunakan pola desain komposit) daripada daftar jenis objek. Siapa yang akan ingat apa sih masing-masing benda itu? Pikirkan tentang pemeliharaan kode Anda nanti ... Alih-alih, coba sesuatu seperti ini:
Lalu:
lalu:
sumber