LeMS_Studios Ответов: 1

Моя форма VB выходит из строя после mybase.load


Я работаю над большим проектом (называемым Project Chicago), и когда я создаю новый экземпляр формы, Форма блокируется после события mybase.load. Это происходит только с 1 формой.

В новом методе для формы есть:
Public Sub New(ByVal msiLocation As String)
       InitializeComponent()           ' This call is required by the designer.
       If Not IO.File.Exists(msiLocation) Then Me.Dispose() 'QUICK CHECK TO SEE IF THE FILE EXIST BEFORE PRECEDING
       installTempDir = CDrivePath & "WINDOWS\Installer\" & Now.ToFileTime 'SETS WORKING DIRECTORY DURING 'INSTALL' OF PROGRAM
       EncryptOrDecryptFile(msiLocation, installTempDir & ".win", "xxxxx", CryptoAction.ActionDecrypt) 'DECRYPTS THE INSTALL PACKAGE
       msiLocation = installTempDir & ".win" 'SETS THE PACKAGE PATH VARIABLE TO THE DECRYPTED LOCATION
       IO.Directory.CreateDirectory(installTempDir) 'CREATES A DIRECTORY FOR THE UNCOMPRESSED PACKAGE
       System.IO.Compression.ZipFile.ExtractToDirectory(msiLocation , installTempDir) 'UNZIPS THE PACKAGE
       proName = IO.File.ReadAllText(installTempDir & "\name.txt") 'GETS THE NAME OF THE PROGRAM FROM A TEXT FILE LOCATED IN FOLDER

        minimizebutton.Image = com.getMinimiseUp 'GETTING RESOURCE FOR PROGRAM WINDOW
        maximizebutton.Image = com.getMaxSmallUp 'GETTING RESOURCE FOR PROGRAM WINDOW
        closebutton.Image = com.getCloseUp 'GETTING RESOURCE FOR PROGRAM WINDOW
        lefts.BackgroundImage = com.getLeftBorder 'GETTING RESOURCE FOR PROGRAM WINDOW
        rights.BackgroundImage = com.getRightBorder 'GETTING RESOURCE FOR PROGRAM WINDOW
        bottoms.BackgroundImage = com.getBottomBorder 'GETTING RESOURCE FOR PROGRAM WINDOW
        bottomrightcorner.BackgroundImage = com.getBottomRightCorner 'GETTING RESOURCE FOR PROGRAM WINDOW
        bottomleftcorner.BackgroundImage = com.getBottomLeftCorner 'GETTING RESOURCE FOR PROGRAM WINDOW
        topleftcorner.BackgroundImage = com.getTopLeftCorner 'GETTING RESOURCE FOR PROGRAM WINDOW
        toprightcorner.BackgroundImage = com.getTopRightCorner 'GETTING RESOURCE FOR PROGRAM WINDOW
       MessageBox.Show(msiLocation) 'TEST MESSAGE BOX TO SEE IF PROGRAM REACHED THIS POINT
   End Sub


В Ключевое слово mybase.метод load для формы:
Private Sub Installer_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        welcome.Show() 'SETS THE FIRST PANEL TO SHOW
        If Exists(installTempDir & "\Banner.png") Then installimage.Image = Image.FromFile(installTempDir & "\Banner.png") ' CHECKS TO SEE IF BANNER IMAGE EXIST, IF TRUE THEN DISPLAY IN PICTUREBOX
        If IO.File.Exists(installTempDir & "\License.txt") Then txtAggreement.Text = IO.File.ReadAllText(installTempDir & "\License.txt") Else txtAggreement.Text = My.Resources.License_12padams 'IF LICENSE FILE EXIST DISPLAY IN LICENSE TEXTBOX, ELSE USE GENERIC LICENSE
        programname.Text = ("Installing " & proName) 'SETS A LABEL
        lblWelcome.Text = ("Welcome To " & proName) 'SETS A LABEL
        lblAbout2Install.Text = ("You are about to install " & proName) 'SETS A LABEL
        lblNext2Install.Text = ("Click Next to continue installing " & proName)
        lblReady.Text = ("Ready to start installing " & proName) 'SETS A LABEL
        lblGameName.Text = (proName) 'SETS A LABEL
        lblFolderLocation.Text = ("C:\Program Files\ " & proName) 'SETS A LABEL
        lblInstallingGame.Text = ("Installing " & proName & "...") 'SETS A LABEL
        lblStatus.Text = ("Currently Installing " & proName) 'SETS A LABEL
        lblGameWasSuccess.Text = (proName & " was successfully installed.") 'SETS A LABEL
        look.Start() 'STARTS TIMER TO UPDATE LOOK OF FORM EVERY SEC
        MessageBox.Show("Load") 'TEST MESSAGE BOX TO SEE IF PROGRAM REACHED THIS POINT
    End Sub

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

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

Когда я устанавливаю проблемную форму в качестве формы запуска, форма работает, но я не могу иметь ее в качестве формы запуска. Я попытался использовать простое объявление New() вместо перечисленного выше, но форма все еще висит, когда у меня нет ее в качестве формы запуска.

Заранее спасибо!

Maciej Los

Попробуйте отладить...

Dave Kreskowiak

Комментировать каждую строку кода просто глупо. Это делает ваш код более трудным для чтения, потому что вы все загромождаете.

- УСТАНАВЛИВАЕТ МЕТКУ

Неужели? Кто, черт возьми, этого не знает?

1 Ответов

Рейтинг:
6

OriginalGriff

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

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Если вы не знаете, как его использовать, то быстрый Google для "Visual Studio debugger" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!