これはBackGroundWorkerのキャンセルに関する最初の質問ではありませんが、私の問題を解決するための答えが見つかりませんでした。
私は
が、どのように私は、ファイルを送信の途中でのBackgroundWorkerをキャンセルすることができます。..それを呼び出すためにBackgroundWorkerのを使用してファイル..イムを送信する方法を持っている..私は私がここにバックグラウンドワーカーでDoWorkをキャンセルする方法
if (backgroundWorker1.CancellationPending == true)
{
e.Cancel = true;
break;
}
を置くべき場所だ意味しますコード:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
List<object> job = (List<object>)e.Argument;
string srcPath = (string)job[0];
string destPath = (string)job[1];
SendFile(srcPath, destPath);
}
送る方法:私はしばらくCancellationPendingをチェックする必要があり
private void SendFile(string srcPath, string destPath)
{
string dest = Path.Combine(destPath, Path.GetFileName(srcPath));
using (fs = new FileStream(srcPath, FileMode.Open, FileAccess.Read))
{
try
{
long fileSize = fs.Length;
if (sizeAll == 0)
sizeAll = fileSize;
sum = 0;
int count = 0;
data = new byte[packetSize];
SendCommand("receive<" + dest + "<" + fs.Length.ToString());
ProgressLabel(++fileCount, allFileCount);
InfoLabel("Sending " + srcPath, "busy");
while (sum < fileSize)
{
count = fs.Read(data, 0, data.Length);
network.Write(data, 0, count);
sum += count;
sumAll += count;
backgroundWorker1.ReportProgress((int)((sum * 100)/fileSize));
}
network.Flush();
}
finally
{
network.Read(new byte[1], 0, 1);
CloseTransfer();
}
}
}
()ループ私はこのメソッドからバックグラウンド労働者の[e.Cancel]に行くことができません。どうすればいいですか?
backgroundWorker1_DoWorkのパラメータとしてeをSendFileに渡し、ReportProgressの後にwhileループでチェックインするのはなぜですか?あなたはまた、CloseTransferにfinally節を持っています – Steve
@スティーブ.. sendfileメソッドを編集するのは次のようなものです: void SendFile(文字列srcPath、string destPath、DoWorkEventArgs e) –
はいすべてですSendFileに第3引数を追加するだけです – Steve