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.
Panduan langkah demi langkah ini menunjukkan cara mendeklarasikan dan memicu peristiwa untuk kelas bernama Widget
. Setelah menyelesaikan langkah-langkahnya, Anda mungkin ingin membaca topik pendamping, Panduan: Menangani Peristiwa, yang menunjukkan cara menggunakan peristiwa dari Widget
objek untuk memberikan informasi status dalam aplikasi.
Kelas Widget
Anggap untuk saat ini Anda memiliki kelas Widget
. Kelas Anda Widget
memiliki metode yang dapat memakan waktu lama untuk dijalankan, dan Anda ingin aplikasi Anda dapat memasang semacam indikator penyelesaian.
Tentu saja, Anda dapat membuat objek Widget
menampilkan kotak dialog persen selesai, tetapi kemudian Anda akan terjebak dengan kotak dialog tersebut di setiap proyek di mana Anda menggunakan kelas Widget
. Prinsip desain objek yang baik adalah membiarkan aplikasi yang menggunakan objek menangani antarmuka pengguna—kecuali seluruh tujuan objek adalah untuk mengelola formulir atau kotak dialog.
Tujuan Widget
adalah untuk melakukan tugas lain, jadi lebih baik menambahkan PercentDone
event dan membiarkan prosedur yang memanggil metode Widget
menangani dan menampilkan pembaruan status pada peristiwa tersebut. Peristiwa ini PercentDone
juga dapat menyediakan mekanisme untuk membatalkan tugas.
Untuk membangun contoh kode untuk topik ini
Buka proyek Aplikasi Windows Visual Basic baru dan buat formulir bernama
Form1
.Tambahkan dua tombol dan label ke
Form1
.Beri nama objek seperti yang diperlihatkan dalam tabel berikut.
Objek Harta benda Pengaturan Button1
Text
Mulai Tugas Button2
Text
Batalkan Label
(Name)
,Text
lblPercentDone, 0 Pada menu Proyek , pilih Tambahkan Kelas untuk menambahkan kelas bernama
Widget.vb
ke proyek.
Untuk mendeklarasikan event untuk kelas Widget
Event
Gunakan kata kunci untuk mendeklarasikan peristiwa diWidget
kelas . Perhatikan bahwa suatu peristiwa dapat memiliki argumenByVal
danByRef
, seperti yang diperlihatkan oleh peristiwaWidget
PercentDone
.Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Saat objek panggilan menerima PercentDone
peristiwa, Percent
argumen berisi persentase tugas yang selesai. Argumen Cancel
dapat diatur ke True
untuk membatalkan metode yang menaikkan peristiwa.
Nota
Anda dapat mendeklarasikan argumen peristiwa sama seperti argumen prosedur, dengan pengecualian berikut: Peristiwa tidak dapat memiliki Optional
atau ParamArray
argumen, dan peristiwa tidak memiliki nilai pengembalian.
Peristiwa PercentDone
ini dilontarkan oleh metode LongTask
dari kelas Widget
.
LongTask
mengambil dua argumen: lamanya waktu metode berpura-pura melakukan pekerjaan, dan interval waktu minimum sebelum LongTask
berhenti untuk menaikkan acara PercentDone
.
Untuk memicu event PercentDone
Untuk menyederhanakan akses ke properti
Timer
yang digunakan oleh kelas ini, tambahkan sebuah pernyataanImports
ke bagian atas bagian deklarasi modul kelas Anda, di atas pernyataanClass Widget
.Imports Microsoft.VisualBasic.DateAndTime
Tambahkan kode berikut ke kelas
Widget
:Public Sub LongTask(ByVal Duration As Single, ByVal MinimumInterval As Single) Dim Threshold As Single Dim Start As Single Dim blnCancel As Boolean ' The Timer property of the DateAndTime object returns the seconds ' and milliseconds that have passed since midnight. Start = CSng(Timer) Threshold = MinimumInterval Do While CSng(Timer) < (Start + Duration) ' In a real application, some unit of work would ' be done here each time through the loop. If CSng(Timer) > (Start + Threshold) Then RaiseEvent PercentDone( Threshold / Duration, blnCancel) ' Check to see if the operation was canceled. If blnCancel Then Exit Sub Threshold = Threshold + MinimumInterval End If Loop End Sub
Saat aplikasi Anda memanggil metode LongTask
, kelas Widget
akan memicu peristiwa PercentDone
setiap MinimumInterval
detik. Saat peristiwa kembali, LongTask
memeriksa apakah argumen Cancel
diatur ke True
.
Beberapa penafian diperlukan di sini. Untuk kesederhanaan, LongTask
prosedur mengasumsikan Anda tahu terlebih dahulu berapa lama tugas akan berlangsung. Ini hampir tidak pernah terjadi. Membagi tugas menjadi potongan-potongan dengan ukuran yang sama bisa menjadi sulit, dan seringkali yang paling penting bagi pengguna hanyalah seberapa lama waktu yang berlalu sebelum mereka mendapatkan indikasi bahwa sesuatu terjadi.
Anda mungkin telah melihat kelemahan lain dalam sampel ini. Properti Timer
mengembalikan jumlah detik yang telah berlalu sejak tengah malam; oleh karena itu, aplikasi macet jika dimulai tepat sebelum tengah malam. Pendekatan yang lebih hati-hati untuk mengukur waktu akan mempertimbangkan kondisi batas seperti ini, atau menghindarinya sama sekali, menggunakan properti seperti Now
.
Sekarang setelah kelas Widget
dapat memicu peristiwa, Anda dapat pindah ke panduan berikutnya.
Panduan: Menangani Peristiwa menunjukkan cara menggunakan WithEvents
untuk mengaitkan penanganan aktivitas dengan PercentDone
peristiwa.