Bagikan melalui


Panduan: Mendeklarasikan dan Memicu Event (Visual Basic)

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

  1. Buka proyek Aplikasi Windows Visual Basic baru dan buat formulir bernama Form1.

  2. Tambahkan dua tombol dan label ke Form1.

  3. 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
  4. 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 di Widget kelas . Perhatikan bahwa suatu peristiwa dapat memiliki argumen ByVal dan ByRef, seperti yang diperlihatkan oleh peristiwa WidgetPercentDone.

    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

  1. Untuk menyederhanakan akses ke properti Timer yang digunakan oleh kelas ini, tambahkan sebuah pernyataan Imports ke bagian atas bagian deklarasi modul kelas Anda, di atas pernyataan Class Widget.

    Imports Microsoft.VisualBasic.DateAndTime
    
  2. 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.

Lihat juga