Я вызываю форму «Найти» из FrmDelivery. Форма «Поиск» сбой при попытке сканирования штрих-кода в поле редактирования (тот же код отлично работает в другом месте приложения, например, в FrmDelivery).Возможно ли, чтобы события закрытой формы загорелись?
Файл журнала показывает, что FrmDelivery это форма переживания исключение:
Message: Reached frmDelivery.StartRead
Date: 2/19/2015 7:39:39 PM
Message: From FrmDelivery.StartRead(): The scanner not enabled, Call Enable() first.; Inner Ex: ; Stack Trace: at
Symbol.Barcode.Actions.Read(ReaderData rd)
Тем не менее, до открытия формы Find, я закрываю FrmDelivery ("это" ниже):
private void buttonFind_Click(object sender, EventArgs e)
{
ExceptionLoggingService.Instance.WriteLog("Reached frmDelivery.buttonFind_Click");
this.Close(); // Close the Delivery form; this still leaves frmMain up
const HHSConsts.RecordTypes rt = HHSConsts.RecordTypes.Delivery;
frmFind ff = new frmFind(rt, dsdName);
ff.ShowDialog();
}
StartRead() - метод, исключающий исключение:
private void StartRead()
{
ExceptionLoggingService.Instance.WriteLog("Reached
frmDelivery.StartRead");
try
{
// If we have both a reader and a reader data
if ((this.barcodeReader != null) && (this.barcodeReaderData !=
null))
{
if (this.barcodeReaderData.IsPending) return;
// Submit a read
this.barcodeReader.ReadNotify += this.barcodeEventHandler;
this.barcodeReader.Actions.Read(this.barcodeReaderData);
}
}
catch (Exception ex)
{
String msgInnerExAndStackTrace = String.Format(
"{0}; Inner Ex: {1}; Stack Trace: {2}", ex.Message,
ex.InnerException, ex.StackTrace);
ExceptionLoggingService.Instance.WriteLog(String.Format("From
FrmDelivery.StartRead(): {0}", msgInnerExAndStackTrace));
}
}
// StartRead() называется четырехместным s в FrmDelivery:
private void textBoxUPC_PLU_GotFocus(object sender, EventArgs e)
{
textBoxUPC_PLU.BackColor = HHSConsts.BARSCAN_COLOR; // Why is this
not sticking?
ExceptionLoggingService.Instance.WriteLog("Reached
frmDelivery.textBoxUPC_PLU_GotFocus");
if (this.InitReader())
{
this.StartRead();
}
}
private void BarcodeReader_ReadNotify(object sender, EventArgs e)
{
ExceptionLoggingService.Instance.WriteLog("Reached
frmDelivery.BarcodeReader_ReadNotify");
try
{
Symbol.Barcode.ReaderData TheReaderData =
this.barcodeReader.GetNextReaderData();
if (TheReaderData.Result == Symbol.Results.SUCCESS)
{
// Handle the data from this read
this.HandleData(TheReaderData);
// Start the next read
this.StartRead();
}
}
catch (Exception ex)
{
String msgInnerExAndStackTrace = String.Format(
"{0}; Inner Ex: {1}; Stack Trace: {2}", ex.Message,
ex.InnerException, ex.StackTrace);
ExceptionLoggingService.Instance.WriteLog(String.Format("From
FrmDelivery.BarcodeReader_ReadNotify(): {0}",
msgInnerExAndStackTrace));
}
}
private void ReaderForm_Activated(object sender, EventArgs e)
{
ExceptionLoggingService.Instance.WriteLog("Reached
frmDelivery.ReaderForm_Activated");
// If there are no reads pending on barcodeReader, start a new read
if (!this.barcodeReaderData.IsPending)
{
this.StartRead();
}
}
private void textBoxId_GotFocus(object sender, EventArgs e)
{
ExceptionLoggingService.Instance.WriteLog("Reached
frmDelivery.textBoxId_GotFocus");
if (this.InitReader())
{
this.StartRead();
}
}
Но как любой этих методов называют StartRead() после того, как форма была закрыта?
Я смущен: вы говорите, что форма поиска сбой, но выдержка из журнала, кажется, говорит, что frmDelivery является источником, который также называется формой, закрытой в первом блоке кода. Во всяком случае, frmДоставка диалога тоже? – Plutonix
Да, это мой вопрос - почему зажигаются события закрытой формы? FrmDelivery вызывается из frmMain через ShowDialog(); frmFind вызывается из FrmDelivery с помощью ShowDialog(). –
Боковое примечание: 'this.barcodeReader.ReadNotify + = this.barcodeEventHandler;' выглядит как проблема, потому что кажется, что он многократно добавляет этот обработчик событий. Это может сделать метод несколько раз. – LarsTech