2016-03-31 2 views
0

これは説明が少し難しいかもしれませんが、ここでは行っています。progressbar.valueではなくステップバイステップでタイマーを作ることができます

イントロ:

私は9つのチャンネル内のファイルを数えています。各チャネルは、基本的にはパス(\ server \ share \ folder)です。今はタイマーとプログレスバーがあります。 progressbar.value = 10の場合、channel 1が検索されています。 When progressbar.value = 20channel 2が検索されています(指定されたパス内のファイルが検索されてカウントされています)。 100を値1に戻してやり直します。

チャンネルにあるパスの中には膨大な量のファイルがあるため、処理が完了するまでに時間がかかり、プログレスバーにヒットしたときにプログラムが遅くなるように見えるという問題があります。多くのファイルを持つチャネルがフックされます。だから私はその間隔に基づいてカウントするタイマを望んでいない

し、その後、すべてがその依存:私が探している何

。私はそのチャンネルを数えたいと思っています。それからそのチャンネルを次のチャンネルに移したいと思っています。基本的にこのように:Channel 1, counting, complete, moving to channel 2.Channel 2, counting, complete, moving to channel 3.だからこそ...しかし、それは正確で制御されていなければなりません。したがって、各チャンネルは、の最小値を1秒間使用する必要があります。

はい、私は常にカウントしたくありません。完了するまで各チャンネルをカウントする必要がありますが、非常に短い時間(たとえば5ミリ秒)で完了した場合でも、1秒ほど待ってから次のチャンネルに進みます。これを達成するために私はいくつかのことを試みましたが、私が望むようなものはありません。さらに下を参照してください。ここで


それはあなたが私が話してきたプログレスバーでpbmain.value = 10 thenに気付くでしょう

pbMain.Increment(1) 
            'Channel 1 
    If cbc1.Checked = True Then 
     If pbMain.Value = 10 Then 
      Try 
       Dim fileTotal As Integer 
       For Each item As String In lbChannel1.Items 
        fileTotal += My.Computer.FileSystem.GetFiles(item.ToString, FileIO.SearchOption.SearchTopLevelOnly, (tbExt1.Text)).Count 
       Next 
       tbCount1.Text = String.Format("{0}", fileTotal.ToString) 
      Catch ex As Exception 
       lbErrors.Items.Add(String.Concat(TimeOfDay & " Error 001: ", ex.Message)) 'Error output 

      End Try 
      Dim tCount As Integer = 0 
     End If 
    End If 
             'Channel 2 
    '... same as above. Then channel 3, 4, 5, 6, 7, 8 and 9... 

timermain.tick内にあるカウンター。 lbchannel1.itemsは、項目としてパスを持つリストボックスであるチャンネルです。これは9チャンネルすべてで繰り返されますが、他のチャンネルはpbmain.value 20,30,40,50,60,70,80,90になりますが、上記のコードでは値10になります。

質問:

私はこれを行うことができますが、チャンネルのカウントを有効にする方法としてprogressbar.valueを使用できませんか?あまり正確ではありません。

質問が投稿された後、tried performstepthread.sleep ++になりました。アップデートを見てください。

PS:プログレスバーは必要ありません。視覚効果のためにそこにありません。


更新#1:

代わりのpbmain.increment(1)私はそれをカウントしたときに、それは次のチャンネルとカウントにスキップthatsの完全なように、各チャネル間pbmain.performstep()を追加しようとしました。仕事はできますが、それは全く制御されず、狂ったようにループします。だからこそ、これは何とかコントロールされていると素晴らしいだろう。各チャンネルの間にはミリ秒を使用しないでください。アプリケーションは、制御されたものではなく、常に数えられると考えられています。

更新#2:

は、私は現在しようとしているprogressbar Marqueeモードを試して、コメントにPlutonixからヒントを得ました。

更新#3:

私は各カウントの間のThread.sleepしようとしたが、本当にひどくプログラムを凍結するようです。私は、コード内のコメントを参照してください、このようにそれを行うだろう

+0

あなたは正確に各ループのために使用してプログレスバーをインクリメントすることができるようになるだろうアレント。プログレバーをマーキーモードで試しましたか? – Plutonix

+0

ええと、私はそれについて聞いたこともありません。私はそれについていくつかの研究をします。 – MadsTheMan

+0

「私はプログレスバーを隠しました」と言うと、プログレスバーが表示されないということですか?表示されていない場合は、プログレスバーを置くのは何ですか? –

答えて

1

...

Private Sub CheckChannels() 
    'We will run through each Channel 
    For Channel = 1 to 9 
    Dim Cbox = CType(Controls.Find("cbc" & Channel, True).FirstorDefault(), CheckBox) 
    'That will work if the 9 checkboxes names are cbcX 
    If Cbox.Checked = True Then 
     Try 
     Dim fileTotal As Integer 
     'If we have files in the ListBox 
     'Again, the listboxes names must be lbChannelX 
     If CType(Controls.find(("lbChannel" & Channel), True).FirstorDefault(), ListBox).Items.Count > 0 Then 
      'We run through each item in ListBox 
      For Each item As String In CType(Controls.Find("lbChannel" & Channel, True).FirstorDefault(), ListBox).Items 
      'We count the files 
      fileTotal += My.Computer.FileSystem.GetFiles(item.ToString, FileIO.SearchOption.SearchTopLevelOnly, (CType(Controls.Find("tbExt" & Channel, True).FirstorDefault(), TextBox).Text)).Count 
      Next 
      'We update the count for that channel 
      CType(Controls.Find("tbCount" & Channel, True).FirstorDefault(), TextBox).Text = String.Format("{0}", fileTotal.ToString) 
     Else 
      'We have no files in that channel, we can do Thread.Sleep(1000) 
     End If 
     Catch ex As Exception 
     'Error output 
     lbErrors.Items.Add(String.Concat(TimeOfDay & " Error 00" & Channel & " : ", ex.Message)) 
     End Try 
     'I don't know what's the use of this var 
     Dim tCount As Integer = 0 
    End If 
    Next 
End Sub 
+0

マーティン、これは素晴らしいです。私はctypeの使い方も知らなかった。私は一日中それをテストするつもりです。コードにコピーするだけで、おそらく2つの単純なエラーが発生します。 ** 1)** 2番目の 'If CType'(lbchannelの場合)のFor Channel = 1〜9および** 2)**の次の行が欠落しています。ちょうど終わりのステートメントが欠けている。ちょうど確かに、どこに 'end if'と' next'sを置くのですか?また、「暗いtCount」は、コード内の他のもののためのものです。それは気にしないでください。 :) – MadsTheMan

+0

@MadsTheManが訂正されました。最後の 'End If'を' Next'で置き換えます。 –

+0

CType(Control( "lbChannel"&Channel)、ListBox).Items.Count> 0 )そして、この行。エラーは、 "End of statement expected"と言っている '0 'を指します。それ以降は、「For Each」のように見えます。それを説明する方法はわかりませんが、私は答えを更新して、見ていきます。 – MadsTheMan

関連する問題