1

プロセス中にタイマーを開始すると、プログラムがフリーズします。それを解決する方法はありますか?タイマーの動作中に GUI のすべてのボタンがフリーズしないようにするには?

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
   Do somting...(I sending mail throught SMTP)
End Sub
4

3 に答える 3

8

これはタイマーとは関係ありません。

UI スレッドで長い (ネットワークにバインドされた) 操作を実行しています。
コードが UI スレッドで実行されているときはいつでも、UI は応答できません。

その操作を非同期で、またはバックグラウンド スレッドで実行する必要があります。

于 2013-06-19T17:29:08.887 に答える
1

Slack の回答をまだ理解していない場合は ...

  1. スレッドをインスタンス化する

     Public t1 As Threading.Thread
    
  2. タイマーからスレッドへの呼び出しを行います。

    Private Sub someTimer(sender As Object, e As EventArgs) Handles someTimer.Tick
    t1 = New Thread(New ThreadStart(AddressOf SomeSubRoutine))
    t1.Start()
    end sub
    
  3. サブルーチンで電子メール コードを実行する

    sub Subroutine()
    
    email code here // make sure that therer are no GUI or Main Thread calls else you have to get into delegates and invoke methods
    
    end sub 
    
  4. 完了しました。Gui スレッドはハングアップしませんが、スレッドを直接呼び出すタイマーに近づかないことをお勧めします

于 2013-06-26T21:05:08.463 に答える