我有3個類,即登錄,條碼和主。
登錄類只包含用戶的身份驗證。
條碼類具有以下代碼片段:如何避免重複訂閱活動?
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);
}
}
而在主類,條形碼事件的subsciption完成:
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
}
}
事件訂閱的重複,當我嘗試註銷併發生再次登錄。
當我嘗試調試時,BarcodeReadOut被調用兩次。
在註銷時,在打開登錄屏幕之前調用removeInstance(),並且Main窗體爲Close()和Dispose()。
有人可以幫助我如何避免上述事件的重複?
我也註冊了事件之前這樣做,但什麼也沒有發生:
public Main()
{
barcode.BarcodeReadOut -= new barcode.BarcodeReadHandler(getBarcodeStr);
barcode.BarcodeReadOut += new barcode.BarcodeReadHandler(getBarcodeStr);
}
可以清除所有帶反射的eventsubscriptions。看看這裏http://stackoverflow.com/questions/91778/how-to-remove-all-event-handlers-from-a-control –
你可以檢查'barcode.BarcodeReadOut == null' – Hassan
上面的鏈接是好的,但一定要閱讀,因爲接受的答案似乎不是最好的。 – TaW