前提・実現したいこと
一定期間を過ぎたファイルを削除して、その後メインを起動するシステムを作ろうとしています。
そのファイルを削除するという工程をスキップするボタンがあるのですが、そのボタンをファイル削除中に押すことができません。
コードはVB.NETで書いています。
Windows Forms を作っています。
開発環境は、
win10
visual studio express 2017
.NET Framework 4.6.2
です。
該当のソースコード
VB
1 2’リセットのボタンを押したときの処理 3Private Sub reset_Click(sender As Object, e As EventArgs) Handles reset.Click 4 BackgroundWorker1.CancelAsync() 5End Sub 6 7 8’ファイル削除を行う処理 9Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork 10 11 Dim bgWorker As BackgroundWorker = DirectCast(sender, BackgroundWorker) 12 13 ' パラメータをObject 型からキャストして取り出す 14 Dim maxLoops As Integer = CType(e.Argument, Integer) 15 16 For i = 0 To maxLoops - 1 17 If bgWorker.CancellationPending Then 18 'キャンセルされたとき 19 e.Cancel = True 20 Return 21 End If 22 23 Kill(delete_file_list(i)) 24 bgWorker.ReportProgress(i, delete_file_list(i)) 25 26 Next 27 End Sub 28 29 Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged 30 31 'ProgressBar1の値を変更する 32 ProgressBar.Value = e.ProgressPercentage 33 34 'Labelのテキストを変更する 35 Min.Text = e.ProgressPercentage.ToString 36 lblfileName.Text = CType(e.UserState, String) 37 38 '画面の更新 39 Min.Refresh() 40 lblfileName.Refresh() 41 End Sub
delete_file_list には削除するファイルが配列で入っています。
maxLoops は delete_file_list.count と同じ意味です。
BackgroundWorker1_RunWorkerCompletedも書いているのですが、今回は割愛しております。
試したこと
BackgroundWorker1_ProgressChangedのところで、
画面更新やテキスト変更の部分をコメントアウトするとボタンを押すことができます。
'ProgressBar1の値を変更する
ProgressBar.Value = e.ProgressPercentage
'Labelのテキストを変更する Min.Text = e.ProgressPercentage.ToString 'lblfileName.Text = CType(e.UserState, String) '画面の更新 'Min.Refresh() 'lblfileName.Refresh()
画面の処理のところをプログレスバーだけにするとボタンを押すことができます。
もしできないのでありましたら、仕様の変更も考えております。
少ない情報で申し訳ないのですが、何か解決策などございましたら、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー