jamshid_m Ответов: 2

Winform падает!, говорит, что не может получить доступ к удаленному объекту, есть какие-нибудь предложения?


Привет,
Я создал c# winform. Но когда я запускаю его, он неожиданно выходит из строя и иногда говорит "не может получить доступ к удаленному объекту "или"значение disposed ()".
Я не избавляюсь от объектов во время своей программы.
Он падает случайным образом, я имею в виду, что иногда падает, а иногда нет!
Это обновление элементов управления в отдельных потоках.
Я думаю, что форма выходит неожиданно, но я не знаю почему?!
Что же мне делать?
Как я могу найти проблему?

Что я уже пробовал:

Я пытался попробовать поймать блок, но он не ловит исключение!

Richard Deeming

- Это обновление элементов управления в отдельных потоках."

Ты не можешь этого сделать. Вы можете обновлять элементы управления только из потока пользовательского интерфейса.

2 Ответов

Рейтинг:
0

OriginalGriff

"Удаленные объекты" - это место, где вы создаете экземпляр класса, сохраняете ссылку на него, а затем удаляете оригинал. Когда вы пытаетесь использовать сохраненную ссылку, Все это разваливается, потому что объект, на который она ссылается, больше не существует.
Вы могли бы сделать это напрямую:

MyClass badIdea;
using (MyClass other = new MyClass())
   {
   badIdea = other;
   }
Console.WriteLine(badIdea);
Или, может быть, проще:
MyClass badIdea = new MyClass())
badIdea.Dispose();
Console.WriteLine(badIdea);
Или косвенно:
MyClass badIdea;
using (MyOtherClass other = new MyOtherClass())
   {
   badIdea = other.ContainedInstanceOfMyClass;
   }
Console.WriteLine(badIdea);

Мы не знаем и не можем сказать. Поэтому начните с отладчика и выясните, какой именно экземпляр он находит как утилизированный и когда. Затем начните оглядываться назад в своем коде, чтобы выяснить, когда это было удалено и почему.

Но мы не можем сделать ничего из этого для вас: у нас нет вашего кода, у нас нет ваших данных, и мы не знали бы, как их использовать, если бы мы это сделали!


jamshid_m

Спасибо ребята,
ОК.

Рейтинг:
0

Xanith

Закрытие формы C# (в большинстве случаев) вызовет Dispose. Это может быть источником удаления объектов.

Обновление элементов управления в отдельных потоках может вызвать исключение InvalidOperationException. (Проверьте свойство InvokeRequired на обновляемых элементах управления. Контроль.Вызов или контроль.BeginInvoke можно использовать для вызова метода в потоке, создавшем элемент управления.)