お世話になっております。
現在、案件で指定周期にて定期的にバックアップを動かす処理を実装しようとしているのですが、バックアップの処理は実行できるものの、スレッドが固まっているような状態になってしまいます。自身で書籍や他の方のブログ等参考にしてみたのですが、どうにもうまく実装できません・・・。
どなたかお手数ではございますが、実装方法等ご教示いただけますと幸いです。
前提・実現したいこと
・データバックアップ処理は実装できたが、メインフォームが固まった状態になってしまうので、
バックグラウンドで実行させたい。
・メインフォームからタイマー処理で呼び出された以下コード処理内にバックグラウンドで
実行させる為のコードを追記したい。
発生している問題・エラーメッセージ
申し訳ありません、エラーメッセージ等は出力しておりません・・・。
BackgroundWorkerメソッドは勉強してみたのですが、自身の知識及び理解力が乏しく、
問題解決に至らない次第でございます。
該当のソースコード
vb.net
1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 2 '即時で動かす(稼働検証済) 3 Dim p21 As New System.Diagnostics.Process 4 RichTextBox2.ForeColor = Color.Blue 5 RichTextBox2.Text = "即時バックアップ実行中" 6 'バックアップ前に削除データを作成する 7 Dim files As String() = System.IO.Directory.GetFiles( 8 "バックアップ元のIP", "*.JPG", System.IO.SearchOption.AllDirectories) 9 ListBox1.Items.AddRange(files) 10 11 Using st As New System.IO.StreamWriter("C:\text\deletefile_list.txt", 12 False, System.Text.Encoding.Default) 13 For i As Integer = 0 To ListBox1.Items.Count - 1 14 'ファイルへ書込み 15 st.WriteLine(ListBox1.Items(i).ToString()) 16 Next 17 'ファイル閉じる 18 st.Close() 19 End Using 20 21 '実データのバックアップ 22 p21.StartInfo.FileName = "C:\Users\user\Desktop\M1_Backup_MachineData.bat" 23 p21.Start() 24 p21.WaitForExit() 25 System.IO.File.Delete("C:\text\Backup#1.txt") 26 27 '事前の削除データを読み込み、データを削除する 28 If System.IO.File.Exists("C:\text\delete_machine#PC1_1.txt") Then 29 'データ削除コード(稼働検証済) 30 Dim hReader As New System.IO.StreamReader("C:\text\deletefile_list.txt", System.Text.Encoding.Default) 31 32 ' 読み込んだ結果をすべて格納するための変数を宣言する 33 Dim stResult As String = String.Empty 34 35 ' 読み込みできる文字がなくなるまで繰り返す 36 While (hReader.Peek() >= 0) 37 ' ファイルを 1 行ずつ読み込む 38 Dim stBuffer As String = hReader.ReadLine() 39 ' 読み込んだものを追加で格納する 40 System.IO.File.Delete(stBuffer) 41 'stResult &= stBuffer & System.Environment.NewLine 42 End While 43 ' hReaderを閉じる(正しくはオブジェクトの破棄を保証するを参照) 44 hReader.Close() 45 46 End If 47 48 RichTextBox2.ForeColor = Color.Black 49 RichTextBox2.Text = "即時バックアップ実行済み" 50 End Sub
試したこと
書籍、他の方のブログを参考にさせて頂いた程度でございます。
補足情報(FW/ツールのバージョンなど)
プログラムの実行環境:Windows10 Pro(64bit)
自身の開発環境:Visual Studio 2017 .net FrameWork(ver.4.6.1)(OS:Windows10 Pro(64bit))
作成しているのはWindows Form になります。
※修正・追記致しました。
上記処理はテストで作成した為、Button1が押された時のアクションになっていますが、
実際はタイマー処理にて指定日時が到来した時に呼び出されます。
綺麗なコードでない為、大変申し訳なく思っておりますが、ご教示の程何卒宜しくお願い致します。
回答4件
あなたの回答
tips
プレビュー