0 / 0 / 1
Регистрация: 05.08.2014
Сообщений: 13
1

Необработанное исключение типа "System.ObjectDisposedException" в mscorlib.dll

05.08.2014, 10:34. Показов 8581. Ответов 2
Метки нет (Все метки)

Добрый день!Подскажите пожалуйста.Возникает ошибка

Необработанное исключение типа "System.ObjectDisposedException" в mscorlib.dll

Дополнительные сведения: Дескриптор SafeHandle был закрыт.

Суть в чем,я в потоке принимаю данные с СОМ порта,и хочу каждые допустим 5000 миллисекунт выводите сообщение на форму о том,что если данные не приняты в этот период то ошибка,если приняты выводить соответственно эти данные.Ошибка возникает в момент когда я закрываю форму(по нажатию закрыть убивается поток).Я догадываюсь что ошибка в конфликте записи данных на форму,но не могу понять в чем дело.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 private void Form2_Load(object sender, EventArgs e)
        {
            Form1 frm = (Form1)this.Owner;
 
            readerThread = new Thread(Read);
            readerThread.Start();
        //   frm.serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
        
          //  readThread = new Thread(Writer);
          //  readThread.Start();
        }
 public void Read()
        {
            Form1 frm = (Form1)this.Owner;
            this.BeginInvoke((MethodInvoker)delegate
            {
 
                //textBox1.Text=writestring;
 
                sl = Convert.ToInt32(frm.textBox3.Text);  //время задержки с первой формы
 
            });
            
            string readstring;
            while (true)
            {
                try
                {
                    frm.serialPort1.ReadTimeout = sl;
                    //  Thread.Sleep(sl);
                    byte[] data = new byte[256];
                  
                    frm.serialPort1.Read(data, 0, data.Length);
                    readstring = Encoding.ASCII.GetString(data);
 
                    //readstring = serialPort1.ReadLine();
                    this.Invoke((MethodInvoker)delegate
                    {
                       listBox1.Items.Add(readstring + "\r\n");  //принятые данные с порта
                        //AppendText(readstring + "\r\n");
                    });
 
                }
                catch (TimeoutException)
                {
                   //// MessageBox.Show("error");
                  this.Invoke((MethodInvoker)delegate
                  {
                      listBox1.Items.Add("Превышен интервал ожидания в" +sl);
                  //    //  AppendText(readstring + "\r\n");
                   });
 
             }
              
            }
  private void Form2_FormClosed(object sender, FormClosedEventArgs e)
      {
        //  readThread.Abort();
         readerThread.Abort();
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.08.2014, 10:34
Ответы с готовыми решениями:

Необработанное исключение типа "System.IO.IOException" произошло в mscorlib.dll
Ребят подскажите проблему при сохранение через SaveFileDialog() выдает ошибку: Необработанное...

Необработанное исключение типа "System.Net.Sockets.SocketException" в System.dll
Доброго времени суток! Есть следующая статья: Разработка прокси-сервера на C# В самом конце есть...

Потоки Thread: Необработанное исключение типа "System.NullReferenceException"
Такова проблема thrListener = new Thread(KeepListening); thrListener.Start(); ... public...

Необработанное исключение типа "System.Reflection.TargetInvocationException"
Добрых времени суток. Есть асинхронный сервер, к которому подулючается клиент, передает на серв...

2
Эксперт .NET
5476 / 4246 / 1211
Регистрация: 12.10.2013
Сообщений: 12,248
Записей в блоге: 2
05.08.2014, 23:32 2
vyt386, на вскидку пара моментов (самой логики работы кода не касаюсь):
1. У вас поток (по умолчанию) создан основным, соответственно, вы закрываете форму, но поток-то еще работает и пытается получить доступ к контролам (которых уже нет). Установите свойство потока IsBackground=true.
2. Убивание потока - это самый крайний способ, поток должен отработать и завершиться штатно. Продумайте этот момент. И да, при вызове Abort() для потока возникает ThreadAbortException, так что оберните этот метод в try...catch.
0
0 / 0 / 1
Регистрация: 05.08.2014
Сообщений: 13
06.08.2014, 19:04  [ТС] 3
insite2012, Спасибо,все дело в Abort(),разобрался заработало.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.08.2014, 19:04
Помогаю со студенческими работами здесь

Отправка почты: "необработанное исключение отправки почты в system.Dll"
подскажите - вот пример на C#, но он мне пишет "необработанное исключение отправки почты в...

Выдано исключение типа "System.OutOfMemoryException"
Доброго времени суток. Есть приложение, периодически (довольно редко) ловлю Unhandled Exception...

Выдано исключение типа "System.OutOfMemoryException"
Добрый день. Подскажите, пожалуйста, как бороться с исключением System.OutOfMemoryException?...

Исключение типа "System.StackOverfliwException"
Добрый день. В форма есть ТекстБокс и Кнопка. Ввожу текст в бокс, жму кнопку, функция обрабатывает...

Неявное преобразование типа "System.Drawing.Icon" в "System.Drawing.Image" невозможно
ПОдскажите как можно вставить рисунок в панель если использую ico. Неявное преобразование типа...

Ошибка: "Не удалось привести тип объекта "System.ConsoleKeyInfo" к типу "System.IConvertible"."
При запуске пишет, что "Не удалось привести тип объекта "System.ConsoleKeyInfo" к типу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru