私は(私が思うに)仕事をするものをまとめました。私がオフになっている場合はお知らせください。これがどのように機能するかの簡単な例です。
var backgroundWorker = new BackgroundWorker(){WorkerSupportsCancellation = true};
backgroundWorker.DoWork += (sender, args) =>
{
var thisWorker = sender as BackgroundWorker;
var _child = new Thread(() =>
{
//..Do Some Code
});
_child .Start();
while (_child.IsAlive)
{
if (thisWorker.CancellationPending)
{
_child.Abort();
args.Cancel = true;
}
Thread.SpinWait(1);
}
};
backgroundWorker.RunWorkerAsync(parameter);
//..Do Something...
backgroundWorker.CancelAsync();
バックグラウンド ワーカーはスレッド プールの一部であるため、アボートしたくありません。しかし、アボートを発生させることができるスレッドを内部で実行することができます。その後、backgroundWorker は基本的に、子スレッドが完了するか、プロセスを強制終了するように通知するまで実行されます。その後、バックグラウンド ワーカー スレッドは読み取りプールに戻ることができます。通常、これをヘルパー クラスにラップし、バックグラウンド スレッドで実行するデリゲート メソッドをパラメーターとして渡し、それを子スレッドで実行します。
誰かが壁に頭をぶつけているかどうか教えてください..