
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.96] |
![]() |
|
Сообщ.
#1
,
|
|
|
Привет всем.
Есть простейшее windows приложение. Проблемма в том, что когда пытаюсь его закрыть программно выскакивает вываливается с ошибкой. Пытаюсь вот так. ![]() ![]() Close(); //или так Application.Terminate(); //или так Process.GetCurentProcess().Kill(); Вот с чем вываливается. ![]() Что его не устраивает? Спасибо. |
Сообщ.
#2
,
|
|
|
А debug что говорит?
|
![]() |
Сообщ.
#3
,
|
|
![]() ![]() Application.Exit(); |
Сообщ.
#4
,
|
|
|
Выделяет эту строчку.
![]() ![]() Application.Run(new Form1()); ObjectDisposedException was unhandled Cannot access a disposed object. Object name: 'Form1'. |
![]() |
Сообщ.
#5
,
|
|
newline, по идее там есть кнопочка copy exception details...скопируй сюда, чего она говорит.
|
Сообщ.
#6
,
|
|
|
А зачем так жестоко-то, Kill сразу?
Пробуй что MIF сказал, либо ![]() ![]() Application.ExitThread(); |
![]() |
Сообщ.
#7
,
|
|
wdk, да он же говорит - даже Close () вылетает...
кстати вот убойный совет: попробуй отослать отчёт мелкомягким ![]() ![]() |
Сообщ.
#8
,
|
|
|
Цитата newline @ ObjectDisposedException was unhandled Cannot access a disposed object. Object name: 'Form1'. Посмотри выше по коду где убивается Form1. Там и есть проблема |
Сообщ.
#9
,
|
|
|
ObjectDisposedException was unhandled
Cannot access a disposed object. Object name: 'Form1'. Тут говорится о том , что произошла ошибка при удалении объекта. Нельзя получить доступ к удалённому объекту (Form1). Я бы проверил с помощью обработки искл. ситуаций : try{ Application.Run(new Form1()); } catch(ObjectDisposedException err) { MessageBox.Show(err.Message); } Узнал бы где ошибка и нажал F1. MSDN всё скажет!!! |
![]() |
Сообщ.
#10
,
|
|
PMAXIM,
![]() |
Сообщ.
#11
,
|
|
|
Цитата archimed7592 @ вот ради прикола попробовал убить...managed способом что-то не получается Убить что? у формы метод Dispose вызвать не получается? |
![]() |
Сообщ.
#12
,
|
|
PMAXIM, получается, только форма закрывается и приложение завершается без ошибки. если поставить какой-нить контрол на форму и сделать control.Dispose (), то он исчезнет с формы
![]() |
Сообщ.
#13
,
|
|
|
Что то я не понял, нормально закрывается или такую же ошибку выдает приложение?
|
Сообщ.
#14
,
|
|
|
archimed7592 (OВот что там пишется.
System.ObjectDisposedException was unhandled Message="Cannot access a disposed object.\r\nObject name: 'Form1'." Source="System.Windows.Forms" ObjectName="Form1" StackTrace: at System.Windows.Forms.Control.CreateHandle() at System.Windows.Forms.Form.CreateHandle() at System.Windows.Forms.Control.get_Handle() at System.Windows.Forms.Control.SetVisibleCore(Boolean value) at System.Windows.Forms.Form.SetVisibleCore(Boolean value) at System.Windows.Forms.Control.set_Visible(Boolean value) at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.Run(Form mainForm) at WindowsApplication1.Program.Main() in F:\services\WindowsApplication1\WindowsApplication1\Program.cs:line 17 |
Сообщ.
#15
,
|
|
|
Выложи код в архиве, посмотрим что там!
|
![]() |
Сообщ.
#16
,
|
|
form.Dispose () -> форма закрывается, если это главная форма, то программа завершается без ошибки.
control.Dispose () -> контрол исчезает с формы, можно далее работать с формой. при закрытии программы ошибки не выдает. |
Сообщ.
#17
,
|
|
|
Остается выяснить что у нас на строке 17... Но походу трабла в попытке доступа к уже освобожденному объекту Form1
|
![]() |
Сообщ.
#18
,
|
|
newline, с хэндлами в программе работаешь? небось через winapi\interop? показывай где и как...
|
Сообщ.
#19
,
|
|
|
newline ты после выхода никакой контрол на форму бросать не пытаешься случайно? или еще что нибудь с формой сделать?
|
![]() |
Сообщ.
#20
,
|
|
Цитата Viper @ Остается выяснить что у нас на строке 17 Цитата newline @ Application.Run(new Form1()); Добавлено PMAXIM, после выхода это где к примеру? все финалайзеры\деструкторы\события связанные с формой происходят до dispose'а (или во время его выполнения). |
Сообщ.
#21
,
|
|
|
Цитата archimed7592 @ Цитата Viper @ Остается выяснить что у нас на строке 17 Цитата newline @ Application.Run(new Form1()); Тогда получается, что после закрытия приложения вызывается Application.Run()? Странно это Добавлено archimed7592 После сроки Close()||Exit||Kill(). |
Сообщ.
#22
,
|
|
|
Вот код приложения
![]() ![]() public Form1() { InitializeComponent(); Form2 LogDialog=new Form2(); // получается 17 строкой if (LogDialog.ShowDialog(this) != DialogResult.OK) { MessageBox.Show("Логин или пароль указаны не верно!\nПриложение будет закрыто"); Close(); } } |
![]() |
Сообщ.
#23
,
|
|
newline, не знаю как тебе это удаётся...у меня даже
![]() ![]() private void Form1_Load(object sender, EventArgs e) { try { Close(); } finally { Controls.Add(new Button()); } } |
Сообщ.
#24
,
|
|
|
newlineперенеси код проверки пароля или что у тебя там, из конструктора Form1, в main(), либо создавай его в Form1_Load, как у Archimed7592, а то выходит ты в конструкторе уже разрушаешь объет, который в нем должен быть создан
|
![]() |
Сообщ.
#25
,
|
|
ага, а я и не заметил, что я не в конструкторе балуюсь
![]() да, действительно...ошипка имеет место быть...ну вот и решение - юзай form_load |
Сообщ.
#26
,
|
|
|
Цитата archimed7592 @ ага, а я и не заметил, что я не в конструкторе балуюсь Я тоже не в кострукторе проверял |
Сообщ.
#27
,
|
|
|
Ваша правда Twilight.
Спасибо большое всем. |