Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: И снова о заставке Добавлено: 25.01.05 14:48  

Автор вопроса:  Barulya
Подскажите пожалуйста, как мне сделать к своей проге заставку. Дело в том, что прога загружает очень много данных и много времени уходит на их обработку перед загрузкой главной формы. Пробовал из Sub Main() запускать сначала заставку, выполнял определенные действия по загрузке данных и их обработке, после этого закрывал заставку и открывал главную форму. Но, при загрузке заставки через метод frmStartUp.Show, она не прорисовывается полностью, а только ее границы и белый (пустой) фон. На заставке я использую картинки и надписи.
Заранее благодарен

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #1
Добавлено: 25.01.05 14:53
Открывай Splash-форму (слово "заставка" мне как-то не нравится, ибо
наводит на мысли о скринсэйверах) в новом потоке.

Ответить

Номер ответа: 2
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #2 Добавлено: 25.01.05 18:05
Была у меня необходимость сделать что-то подобное.
Запускал новую форму в отдельном потоке...
Вот такой код примерно.

Module Main
    Public MainForm As frmMain
    Public SplashForm As frmSplash

    ;Delegate Sub Noparams()
    Public Sub Main()
        ;Dim SplashThread As New Threading.Thread(AddressOf ShowSplash)
        SplashThread.Start()

        'Создадим главную форму - она должна существовать до
        'запуска Loader.Load
        MainForm = New frmMain
        'Запускаем длительную процедуру.
        Loader.Load()
        MainForm.StartPosition = FormStartPosition.CenterScreen
        MainForm.Show()
        MainForm.Activate()

        ;Dim Hider As Noparams = AddressOf SplashForm.Hide
        SplashForm.Invoke(Hider)
        SplashForm.MustExit = True

        Application.Run(MainForm)
    End Sub

    Public Sub ShowSplash()
        'Отобразим первую форму
        ;Dim Splash As New frmSplash
        SplashForm = Splash
        Splash.Size = New Size(Splash.Size.Width, Splash.Size.Height + 24)
        Application.Run(Splash)
    End Sub

End Module

Вобщем, элементарный код, звезд с неба не хватат...

Вот только начались проблемы
Во-первых.
Иногда при выполнении в форме frmSplash этого кода (сгенерирован
дизайнером формы):

Me.Label1.Font = New System.Drawing.Font("Courier New", 19.0!,
System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(204, Byte))

вылазит исключение:

An unhandled exception of type 'System.Runtime.InteropServices.ExternalException'
occurred in system.dll
Additional information: Failed to create system events window thread.

Во-вторых.
Иногда при выполнении этой строчки кода (из вышеприведенной процедуры
Main):
MainForm.Show()

происходит исключение
An unhandled exception of type 'System.NullReferenceException' occurred in
system.windows.forms.dll
Additional information: Object reference not set to an instance of an object.

Попробовал убрать весь код, связанный с новым потоком, вроде,
исключение не вылазит, раз 20 проверял...

Что это за гадость и как с нею бороться, я не знаю.
Надеюсь, что у тебя таких исключений возникать не будет

PS А на Splash-форму в своей проге я в конце-концов забил.
Сейчас, сидя на Athlon 2000+ & 512 MB Ram вообще забыл, зачем я хотел
сделать эту Splash-форму - прога запускается за пару секунд.

Ответить

Номер ответа: 3
Автор ответа:
 Barulya



Вопросов: 29
Ответов: 55
 Профиль | | #3 Добавлено: 25.01.05 18:48
Спасибо, попробовал- работает, но вот какая незадача SplashForm.MustExit = True вызывает ошибку, потому, что не понимает такого свойства, и Splash-форма после закрытия главной формы не выгружается, вследствие чего приложение не закрывается. В чем может быть причина?

Ответить

Номер ответа: 4
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 25.01.05 20:34
У формы SplashForm я добавил свойство MustExit - логическое свойство.

В самой форме стоит таймер, интервал, кажется полсукунды был, и если
MustExit=True, то форма прибивается.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам