Saya sedang membuat aplikasi di C # menggunakan Visual Studio. Saya ingin membuat beberapa kode sehingga ketika variabel memiliki nilai 1 maka kode tertentu dijalankan. Saya tahu bahwa saya dapat menggunakan pernyataan if tetapi masalahnya adalah nilainya akan diubah dalam proses asinkron sehingga secara teknis pernyataan if dapat diabaikan sebelum nilainya berubah.
Apakah mungkin untuk membuat penangan peristiwa sehingga ketika nilai variabel berubah, peristiwa dipicu? Jika ya, bagaimana saya bisa melakukan ini?
Sangat mungkin bahwa saya salah memahami cara kerja pernyataan if! Bantuan apa pun akan sangat dihargai.
c#
visual-studio
silverlight
windows-phone-7
event-handling
James Mundy
sumber
sumber
Jawaban:
Sepertinya saya seperti Anda ingin membuat properti.
Ini memungkinkan Anda untuk menjalankan beberapa kode setiap kali nilai properti berubah. Anda bisa mengadakan acara di sini, jika Anda mau.
sumber
Anda bisa menggunakan penyetel properti untuk memunculkan acara setiap kali nilai bidang akan berubah.
Anda dapat memiliki delegasi EventHandler Anda sendiri atau Anda dapat menggunakan delegasi System.EventHandler yang terkenal.
Biasanya ada pola untuk ini:
Berikut contohnya
Keuntungan dari pendekatan ini adalah Anda mengizinkan kelas lain yang ingin mewarisi dari kelas Anda untuk mengubah perilaku jika perlu.
Jika Anda ingin menangkap acara di utas berbeda yang dimunculkan, Anda harus berhati-hati agar tidak mengubah status objek yang ditentukan di utas lain yang akan menyebabkan pengecualian utas silang dilempar. Untuk menghindari hal ini, Anda dapat menggunakan metode Panggil pada objek yang ingin Anda ubah statusnya untuk memastikan bahwa perubahan terjadi di utas yang sama dengan peristiwa yang telah dimunculkan atau jika Anda berurusan dengan Formulir Windows Anda dapat menggunakan BackgourndWorker untuk melakukan berbagai hal dalam utas paralel dengan baik dan mudah.
sumber
Framework .NET sebenarnya menyediakan antarmuka yang dapat Anda gunakan untuk memberi tahu pelanggan saat properti telah berubah: System.ComponentModel.INotifyPropertyChanged. Antarmuka ini memiliki satu acara PropertyChanged. Ini biasanya digunakan di WPF untuk mengikat tetapi saya merasa berguna dalam lapisan bisnis sebagai cara untuk menstandarkan pemberitahuan perubahan properti.
Dalam hal keamanan thread, saya akan mengunci setter agar Anda tidak mengalami kondisi balapan apa pun.
Inilah pemikiran saya dalam kode :):
Semoga bermanfaat :)
sumber
gunakan saja properti
sumber
Anda dapat menggunakan kelas generik:
dan akan dapat melakukan hal berikut:
hasil:
sumber