ファイル処理を処理するための新しいタスクを作成するプロセスを設定しました。例外エラーを受け取って処理せず、続行ボタンをクリックするだけでメインプロセスが実行され続けるという問題が発生しました。また、子タスク内でファイルの競合エラーが発生し、タスクが個別の.exeとして実行されるため、すべてがスレッドセーフであるという印象を受けました。したがって、ここでの最初の問題は、メインプロセスでのタスクの作成です。GProcessは、6つのクラスで構成されるそれ自体の完全なプロジェクトです。これは、メインプロセスクラスform1へのクラスライブラリ参照として追加されます。
Public Class Form1
..Private parser as GProcess.module = new GProcess.module()
dim factory as new taskfactory
factory.startnew(address of parser.main)
try
task.waitall()
catch ae as aggregateexception
for each ex in ae.innerexceptions
logs.insert(ex.message.tostring)
next
finally
parser.ctsources.cancel()
end try
今私はmsdnからaggregateexceptionのものを取得し、それを実装する方法がわかりませんが、基本的に私がしたいのは、例外を引き起こしたタスクをキャンセルし、他のすべてのタスクの実行を続行し、キャンセルされたタスクが作業していたファイルをキャプチャして名前を保存することですログに記録するか、可能であれば、作業中のファイルでそのタスクを再開します。
2番目の問題では、タスクがクラスにアクセスしたときにxmlwriterが作成されます。このタスクは、独自のインスタンスを作成する必要があるため、衝突が発生した理由はわかりませんが、衝突が発生した場合は、タスク/スレッドをキャンセルするか、実行します。ファイルへのアクセスを待機します。
....
public class filecleaner
private xmlfile as string = directoryPath & filename
private xwriter as xmltextwriter = new xmltextwriter(xmlfile,nothing)
....