Привет, коллеги-программисты!objectdisposedexception C#
Я разрабатываю Windows Forms .NET Compact Framework 2.0 для устройства Windows Mobile 6.1, имеющего оборудование для штрих-кодов.
Я могу использовать barcodereader для чтения штрих-кодов, и я также могу активировать и деактивировать его. За исключением того, что когда я пытаюсь что-то прочитать и перехожу к следующей форме, я получаю исключение objectdisposedexception. Это происходит (я думаю), потому что я должен удалить экземпляр считывателя штрих-кода, а затем создать новый в следующей форме.
Проблема заключается в том, что, когда я использую кнопку, чтобы перейти к следующей форме, используя тот же код, чтобы избавиться от barcodereader, у меня нет объектного исключения. Когда я просто добавляю загрузку формы в событие с измененным текстом, ошибка возрастает, но не попадает ни в какие команды try/catch, что приводит к сбою приложения.
Я не могу его отлаживать, потому что эмулятор VS для Windows Mobile не работает с DLL устройства barcodereader.
Может кто-нибудь мне помочь?
Здесь `s код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO;
using System.Windows.Forms;
//DLL that controls the barcodereader
using Intermec.DataCollection;
namespace WOPT_Coletor.view.ConsultarPosicao
{
public partial class frmConsultarPosicao_2 : Form
{
public BarcodeReader leitor;
public frmConsultarPosicao_2()
{
InitializeComponent();
ShowHide.ShowTopStatusbar(false);
//code to work with the barcode reader
model.LeitorCodigoDeBarras classeLeitor = new model.LeitorCodigoDeBarras();
leitor = classeLeitor.LerCodigoDeBarras();
leitor.BarcodeRead += new BarcodeReadEventHandler(this.eventoLeitorCodigoDeBarrasArmazenagem1);
}
//Event to receive the barcode reading information
void eventoLeitorCodigoDeBarrasArmazenagem1(object sender, BarcodeReadEventArgs e)
{
tbCodMaterial.Text = e.strDataBuffer.Trim();
}
private void tbCodMaterial_TextChanged(object sender, EventArgs e)
{
try
{
if (tbCodMaterial.Text.Length == 23)
{
Cursor.Current = Cursors.WaitCursor;
Cursor.Show();
//disposal of the barcodereader instance
leitor.ScannerOn = false;
leitor.ScannerEnable = false;
leitor.Dispose();
leitor = ((BarcodeReader)null);
//processing of the information read.
char[] auxcodMaterial = new char[9];
using (StringReader str = new StringReader(tbCodMaterial.Text))
{
str.Read(auxcodMaterial, 0, 8);
}
string codMaterial = new string(auxcodMaterial);
//loads next form
Form destino = new frmConsultarPosicao_3(codMaterial);
destino.Show();
Cursor.Current = Cursors.Default;
Cursor.Show();
//closes and dispose of the current form
this.Close();
this.Dispose(true);
}
}
catch (ObjectDisposedException ex)
{
MessageBox.Show(ex.Message);
}
}
}
Есть ли причина для вызова как Close, так и Dispose? Метод Close уже вызывает Dispose. –
Это программное обеспечение Intermec? Просмотрите лучшие хиты google для «BarcodeReadEventHandler», у вас много проблем. И, конечно, сначала обратитесь к поставщику за помощью, они узнают об этой проблеме. –
Майк, на самом деле у меня нет причин. Просто положите его на тест (отчаяние? LoL) – Andrew