10

私はこれをグーグルで検索し、ここでいくつかのスレッドを読みましたが、VB.Netアプリケーションをしばらくスリープさせ、アプリケーションの応答性を維持する簡単な方法を見つけられませんでした:

Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Text.RegularExpressions
Imports System.Threading.Thread

[...]

''#How to keep screen frop freezing?
While True
  ListBox1.Items.Clear()

  ListBox1.Items.Add("blah")

  ''#Not much difference
  ListBox1.Refresh()

  ''#Wait 1mn
  Sleep(60000)
End While

VB.Net アプリケーションを数秒間待機させる単純で非ブロッキングのソリューションは本当にないのでしょうか?

ありがとうございました。

4

8 に答える 8

8
Public Sub ResponsiveSleep(ByRef iMilliSeconds As Integer)
    Dim i As Integer, iHalfSeconds As Integer = iMilliSeconds / 500
    For i = 1 To iHalfSeconds
        Threading.Thread.Sleep(500) : Application.DoEvents()
    Next i
End Sub

ResponsiveSleep を呼び出して、アプリケーションの応答性を維持しながら特定のコードを一時停止します。アプリケーションの応答性を高めるために、iHalfSeconds を 10 分の 1 または 100 分の 1 秒に変更できます

于 2010-08-02T17:05:43.243 に答える
7

これはWinFormsまたはWPFですか?

WinFormsの場合は、whileループの代わりにタイマーを使用できます。その後、アプリは引き続き応答し、イベントを発生させます。

WPFでは、 DispatchTimerクラスに基づいて独自のタイマーを作成する必要があると思います。

于 2010-02-10T14:48:03.420 に答える
4
Private Sub wait(ByVal interval As Integer)
    Dim stopW As New Stopwatch
    stopW.Start()
    Do While stopW.ElapsedMilliseconds < interval
        ' Allows your UI to remain responsive
        Application.DoEvents()
    Loop
    stopW.Stop()
End Sub
于 2011-12-02T11:29:01.330 に答える
3

本当に、解決策は 2 つあります: 1.) スリープの代わりにタイマーを使用します。スリープは、スレッドをスリープ状態にします。2.) マルチスレッドを使用し、スクリーン スクレイピング機能を独自のスレッドで実行します。これにより、アプリケーションの応答性が大幅に向上します。

Threading.Thread.Sleep(IntSleepTime)

現在のスレッドを指定された時間一時停止するスレッドセーフなスリープ機能です。そのため、スリープを使用する場合は、マルチスレッド環境でこれを行うことができ、アプリの残りの部分の応答性を維持します。メインスレッドではなく、分岐スレッドをスリープさせます。

于 2012-11-26T16:41:26.170 に答える
1

タイマーの提案は本当にそれを行うための最良の方法です。しかし、DoEventsそれでも機能する場合(5.0以降VBを実行していません)、次のように実行できます。

For i = 0 To 600
    DoEvents
    Sleep(100)
Next

これにより、それぞれ.1秒の600回のスリープが実行され、それぞれの間にDoEventsがあり、現在のイベントを処理します。.1秒は、応答性(.1秒以内にイベントが処理される)とCPU消費(これを速すぎると、待機中であってもアプリがかなりの量のCPU時間を消費し始める)の間の適切なトレードオフになるはずです。

于 2010-02-10T14:52:37.523 に答える
0

U はフォームをスリープ状態にする UI スレッドを作成します。アプリケーションをレスポンシブにしたい場合は、最初にリストビューにアイテムを追加するメソッドを作成し、フォームがロードされたらスレッドを使用してそのメソッドを開始し、スリープを使用してリストビュースレッドをスリープ状態にすると、レスポンシブ状態になります..

于 2013-09-20T09:47:13.093 に答える
0

これはVBAではなくVB用です

    Private Async Function PauseTime(ByVal MS As Integer) As Task

    Await Task.Run(Sub()                         
                           Thread.Sleep(MS)

                   End Sub)


     End Function
于 2017-07-21T22:22:58.957 に答える