デバックについて

タグの編集
投稿者 つよし  () 投稿日時 2008/8/28 23:27:00
デバックを実行して結果を見ると 
プログラムの途中までしか動きません。 
エラーも警告も出ていません。 
詳しい方教えて下さい。 
 
コード 
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
 
 
        Dim i As Integer 
 
        'While i < 10 
 
 
 
        'MsgBox("123") 
        Dim Reader As New IO.StreamReader("C:\sw001.log") 
 
 
 
        TextBox1.Text = Reader.ReadLine() 
        RichTextBox1.Text = Reader.ReadLine() 
        Reader.Close() 
        Select Case RichTextBox1.Text 
 
            Case "red" 
                RichTextBox1.BackColor = Color.Red 
            Case "blue" 
                RichTextBox1.BackColor = Color.Blue 
            Case "yellow" 
                RichTextBox1.BackColor = Color.Yellow 
        End Select 
'ここまでで止まってしまいます。 
 
        Dim Reader2 As New IO.StreamReader("C:\sw002.log") 
        TextBox1.Text = Reader2.ReadLine() 
        RichTextBox1.Text = Reader2.ReadLine() 
        Reader.Close() 
        Select Case RichTextBox1.Text 
 
            Case "red" 
                RichTextBox1.BackColor = Color.Red 
            Case "blue" 
                RichTextBox1.BackColor = Color.Blue 
            Case "yellow" 
                RichTextBox1.BackColor = Color.Yellow 
        End Select 
 
        'System.Threading.Thread.Sleep(1000) 
 
        'MsgBox("123") 
        Dim Reader3 As New IO.StreamReader("C:\sw003.log") 
        TextBox1.Text = Reader3.ReadLine() 
        RichTextBox1.Text = Reader3.ReadLine() 
        Reader.Close() 
        Select Case RichTextBox1.Text 
 
            Case "red" 
                RichTextBox1.BackColor = Color.Red 
            Case "blue" 
                RichTextBox1.BackColor = Color.Blue 
            Case "yellow" 
                RichTextBox1.BackColor = Color.Yellow 
        End Select 
        i = i + 1 
        'System.Threading.Thread.Sleep(1000) 
        'End While 
 
    End Sub
投稿者 つよし  () 投稿日時 2008/8/28 23:57:00
上記のコードですが 
2個目と3個目のReader.closeを 
Reader2.close 
Reader3.close 
に直しました。 
 
しかしやはり同じところで止まってしまいます。 
よろしくお願いします。
投稿者 るしぇ  () 投稿日時 2008/8/29 04:36:00
>>1 
特に止まりはしませんね。 
Sleep 入れても 
画面に表示されるのは sw003.log 
の内容だけでしょうが。 
 
止まっているというのはどうやって 
確認しましたか?
投稿者 つよし  () 投稿日時 2008/8/29 19:31:00
>>2 
申し訳ありません。 
止まっていたのではなく、 
最後のReader3の処理のみでした。 
 
readerとreader2はブレイクポイントで見てみましたが、処理は通っているのですが、richtext1の背景が変化しません。 
 
因みにブレイクポイントで見てみるとrichtext1.backcolorは通っていました。 
 
1回だけ色が変化するのですが、 
i = 10になった最後のループで 
reader3のrichtext1.backcolorのみ 
処理されていると思います。
投稿者 るしぇ  () 投稿日時 2008/8/29 21:44:00
>>3 
というか、処理は全て正常に実行されてるんだけど、描画処理が実行されないから 
画面に反映されないだけね。 
 
ウィンドウは常に再描画されています。他のウィンドウと重なった後とか、 
最大化された時とか、ウィンドウをマウスで移動させた時とか。 
自分のプログラムだけの問題ではないので、OS(Windows)が制御しています。 
つまり、再描画処理は別のプログラムの仕事なんです。 
 
基本的に、プログラムの実行中は一連の処理をまとめて実行します。この間に別の 
プログラムの処理が命令された場合、待機状態となります。先に実行されている 
処理が終わってから待機状態の命令が実行されます。 
# このため、CPU使用率100%とかだとアプリケーションがなかなか起動しなかったり、 
# 表示が遅れたり、いわゆる『重い』状態になります。 
 
ボタンを押したイベントから、Button1_Click_1 の関数の処理は一括して 
実行されます。この間、OSの再描画処理は実行されません。待機状態です。 
Button1_Click_1 から End Sub までが実行されてから画面が再描画されます。 
 
結果、最後の状態しか反映されません。 
 
1つの解決方法として DoEvents で OS に制御を返す方法があります。ただし 
これを実行してしまうと、再描画処理だけでなく、OS が溜め込んでいた待機 
状態の命令が他にも実行されてしまうため、この場面では使用すべきでは 
ありません。 
 
プログラムから再描画処理を呼び出しましょう。 
[Control.Refresh メソッド] 
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.refresh.aspx 
ほとんどのコントロールで使用できますので、そのコントロールの設定を変更した 
直後に、必要な部分の再描画をしてみてください。 
  RichTextBox1.Refresh() 
  TextBox1.Refresh() 
  Me.Refresh() 
など。
投稿者 つよし  () 投稿日時 2008/9/1 21:45:00
>>4 
ありがとうございました。 
 
早速やってみます。