Автор вопроса: Neco | Web-сайт:neco.pisem.net | ICQ: 247906854
Соорудил свой многопоточный блокнот на Нэте. Счас вот в нём пишу.
Только вот гонит он.
Причём без видимых закономерностей. То всё тип-топ весь день, то каждые пять минут предлагается его продебажить (кстати, круто, что теперь и васюковский код можно "цеплять и отлаживать" даже при незапущенном васе).
Итак, вопросы:
1. Иногда, при попытке закрыть окно, обнаруживаю, что оно не слушается. Т.е. тыкаю на закрытие - не закрывается, захожу в меню, там тыкаю - один фиг. Видать, форма просто не реагирует на Me.Close. Вызываю Оконный Менеджер (соорудил к этой проге) и убиваю поток (Abort'ом) этого окна. Окно остаётся жить. Умирает только при завершении процесса. Отчего это может быть?
Механизм вызова новых окон у меня типа такого:
а) Объявляю глобальную переменную потока.
б) Создаю и запускаю поток в процедуру.
в) Процедура вызывает .ShowDialog этого окна.
2. Иногда, вылезает ошибка, говорящая типа: ошибка - такой хэндл уже существует. Это про окна. Типа вася ошибается при назначении хэндла новому окну. На эту ошибку можно сделать Continue - я так и делаю, на что прога реагирует по-разному, иногда дохнет, но чаще прёт дальше. Что это такое?
3. Как сделать так, чтобы главное окно проги не появлялось сходу? Где бы я не ставил .Visible=false (даже в среде!) оно настырно появляется. Наверное, скоро перейду на Sub Main...
4. Как правильно обращаться с окнами? Всмысле, управлять ими вне их. Сейчас я создаю глобальные переменные и с диалогами обращаюсь как с классами, а с этими переменными как собственно с окнами (как в старом васе). Это правильно? Для главного окна тоже создаю переменную frmHead и в Load ставлю frmHead=Me.
Вроде всё работает (если только не считать первые две траблы следствием такого обращения с окнами), но чтоб быть уверенным.
5. Надо ли уничтожать экземпляры классов class_var=nothing? Вскользь видел где-то, что среда их вполне корректно высвобождает по мере надобности и это может только лишние Exeption создать.
6. Как заставить прогу выглядеть по икспишному?
7. Куда делось "исправление кода на лету" ("Apply code changes" как в сишке, а в шестом васе это вообще само собой разумелось) во время отладки? Если исчезло, то передайте Биллу, что я тоскую...
8. ОЧЕНЬ ПРОШУ: дайте кто-нибудь ссылку на как можно более полное описание ключевых фенек Нэт-Васи.
Соорудил свой многопоточный блокнот на Нэте. Счас вот в нём пишу.
Сори, а, может, в этом вся проблема?
Я немного работал с многопоточностью в Windows Forms, но этого "немного" было достаточно, чтоб понять, что многопоточность - вещь жестокая.
Писал запуск формы при выполняемом параллельном процесе, типа, сплешь-форма.
Писал все по методике Д. Эпплмана (тм), и все равно иногда, может, раз на 30 запусков вылазила какая-то бага вообще в левой строчке кода, например, сгенерированной редактором Windows-формы.
Вобщем, тема эта очень и очень сложная, чтоб это понять советую для начала почитать Д. Эпплмана (Переход на VB .NET, Стратегии, концепции, код) (если ты этого, конечно, еще не сделал).
Ну и поискать более обширную литературу по этой теме.
Помню, кто-то советовал Рихтера, не помню, правда, названия.
6. Как заставить прогу выглядеть по икспишному?
Добавить манифест
7. Куда делось "исправление кода на лету" ("Apply code changes" как в сишке, а в шестом васе это вообще само собой разумелось) во время отладки? Если исчезло, то передайте Биллу, что я тоскую...
Форсировало сразу на VB .NET 2005.
Кстати, VB .NET 2005 передавал тебе, что он тоже по тебе тоскует.
8. ОЧЕНЬ ПРОШУ: дайте кто-нибудь ссылку на как можно более полное описание ключевых фенек Нэт-Васи.
Ууууууууууу....
http://msdn.microsoft.com/
Далее по ссылкам.
А если серьезно - для начала книгу по фундаментам .NET - Эпплман или Рихтер, потом - N книг по классам .NET Framework (в моем случае это был Петрусос, "Эффективная работа с VB .NET).
Потом - книги уже по конкретной тенологии (например, ASP .NET).
Ну и параллельно - MSDN.
А может проще обойтись без многопоточности. Зачем она тебе в текстовом
редакторе?
Многопоточность сама по себе штука серьезная и требует грамотного
написаиния кода по синхрноизации доступа к общим ресурсам. А в плане
работы с WinForms, так есть еще один нюанс: к кону и его элементам
может обращаться только тот поток, который его создал. Взаимодействие
других потоков с объектом делается программистом обычно через
делегаты. Если все как надо написать, то ошибок не будет. Проверено.