2017-11-08 3 views
-1

すべての構文は正しいですし、コードを実行するとエラーは表示されませんが、フォームのログインボタンをクリックすると、フリーズしてしまいます。 以下のコードがあります。私はそれを凍らせないように効率的にする方法を知らない。テキストファイルから読み込む配列を使用すると、フォームがフリーズするのはなぜですか?

Imports System.IO 
Public Class Form3 

    Dim reader1 As System.IO.StreamReader 
    Dim classdata As Array 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     reader1 = My.Computer.FileSystem.OpenTextFileReader("C:\Users\ryanm_000\Documents\username and password.txt") 
     While reader1.EndOfStream = True 
      classdata = reader1.ReadLine.Split(",") 
      If TextBox1.Text = "admin" AndAlso TextBox2.Text = "iamtheboss" Then 
       MsgBox("Welcome Mr Khan", MsgBoxStyle.Information, "Admin") 
       Me.Hide() 
       My.Forms.Form7.Text = Now.ToString 
       My.Forms.Form7.Show() 

      ElseIf TextBox1.Text = classdata(0) AndAlso TextBox2.Text = classdata(1) Then 
       Me.Hide() 
       My.Forms.Form5.Text = Now.ToString 
       My.Forms.Form5.Show() 
       reader1.Close() 
      Else 
       MsgBox("Sorry, username or password is invalid, please try again", MsgBoxStyle.Information, "Error") 

      End If 
     End While 
    End Sub 
End Class 
+0

[質問]を読んで[ツアー]をご覧ください。 Visual Studioには* debugger *という優れたツールが付属していますので、この種の問題を見つけて修正することができます。 'すべての構文は正しいし、エラーも出ません'というのは、コンパイルされていることを意味します。バグはありません。 – Plutonix

+1

EndOfStream = Trueの間はループしています。それは不合理なようだ。ファイルが空の場合、常にストリームの終わりなので、永遠にループします。ファイルが空でない場合、それは偽になり、決してループに入りません(基本的に、私がこれについて考えている間に彼が追加したphaonの答え) – dwilliss

+1

問題は確かに配列ではありません。コードをデバッグしてください!メソッドの最初のステートメントにブレークポイントを設定し、行ごとにブレークポイントを実行すると、それが動作しない理由がわかります!参照:[デバッガでのコードのナビゲート](https://msdn.microsoft.com/en-us/library/y740d9d3.aspx?f=255&MSPPError=-2147217396) –

答えて

2

読者がストリームの最後にいない間にファイルを処理したいとします。 whileの条件をWhile reader1.EndofStream = Falseに変更してみてください。または書くことができます。While Not reader1.EndOfStream

+0

あなたの答えにいくつかのコードを追加してください。 –

関連する問題