Oturum açma, Barkod ve Ana olmak üzere 3 sınıfa sahibim.
Giriş sınıfı sadece kullanıcıların kimlik doğrulamasını içerir.Etkinlik aboneliğinin çoğaltılması nasıl önlenir?
class Barcode
{
public delegate void BarcodeReadHandler(object sender, BarcodeEventArgs e);
public event BarcodeReadHandler BarcodeReadOut;
public Barcode()
{
//.. some codes for getting data on the scanner
BarcodeEventArgs args = new BarcodeEventArgs(scannedData);
BarcodeReadOut(this, args);
}
}
Ana sınıfında, Barkod olayın aboneliğinizi, yapılırken: Ben çıkış deneyin ve ne zaman
public partial class Main : Form
{
private Barcode barcode = null;
public Main()
{
barcode.BarcodeReadOut += new barcode.BarcodeReadHandler(getBarcodeStr);
}
//This is called before log-out.
public void removeInstance()
{
barcode.BarcodeReadOut -= new barcode.BarcodeReadHandler(getBarcodeStr);
}
private void getBarcodeStr(object sender, BarcodeEventArgs e)
{
//some code
}
}
olay abonelik çoğaltılması olur
Barkod sınıfı aşağıdaki pasajı kodu vardır Tekrar giriş yap.
Hata ayıklamaya çalıştığımda, BarcodeReadOut iki kez çağrılır.
Oturum kapandığında, oturum açma ekranı açılmadan önce removeInstance() çağrılır ve Ana form Kapat() ve Dispose() şeklindedir.
Birisi bana, söz konusu olayların çoğaltılmasını nasıl önleyebilirim?
Ben de etkinliğe kayıt olmadan önce yapmış ama hiçbir şey olmuyor:
public Main()
{
barcode.BarcodeReadOut -= new barcode.BarcodeReadHandler(getBarcodeStr);
barcode.BarcodeReadOut += new barcode.BarcodeReadHandler(getBarcodeStr);
}
tüm temizleyebilirsiniz Ve o olayın gerçekleştiğini (sizin durumunuzda bir form sınıfı) diğer sınıflar uyaran bir özel etkinlik eklemek için iyi olabilir yansımaları ile eventubscriptions. Http://stackoverflow.com/questions/91778/how-to-remove-all-event-handlers-from-a-control –
'a bakabilirsiniz' barcode.BarcodeReadOut == null 'kontrol edebilirsiniz Yukarıdaki bağlantı – Hassan
iyi, ama kabul edilen cevap en iyi gibi göründüğünden, bunu okumak için emin olun. – TaW