私はC#、RestSharp、およびスレッド化に慣れていないので、私がやろうとしていることは次のとおりです.tumblrに
写真をアップロードできるようにするプログラムを作成し、これまでのところアップロードが機能しています. ExecuteAsync()
ここで、停止ボタンが機能する必要があります。これは、の代わりに使用する必要があることを意味すると思いますExecute()
。次のように、コードをバックグラウンドワーカーに入れています。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
MessageBox.Show("You pressed Cancel.");
}
else
{
var restClient = new RestClient("http://tumblr.com/api/write");
foreach (string item in queueBox.Items)
{
var request = new RestRequest(Method.POST);
request.RequestFormat = DataFormat.Json; //I don't know if this line is necessary
request.AddParameter("email", usernameBox.Text);
request.AddParameter("password", passwordBox.Text);
request.AddParameter("type", "photo");
request.AddFile("data", FolderName + "\\" + item);
RestResponse response = restClient.Execute(request);
doneBox.Invoke(new UpdateTextCallback(this.UpdateText),
new object[] { item });
}
}
}
私はこれを正しく設定したと信じています。押すとそれに応じupload
て進みます。ただし、これはブロック
else
していると思います。これにより、コードがフラグのチェックを続行できなくなります。
これが私がそれをキャンセルしようとする方法です。RestResponse response = restClient.Execute(request);
public void stopButton_Click(object sender, EventArgs e)
{
doneBox.Items.Add("You pressed the stop button.");
backgroundWorker1.WorkerSupportsCancellation = true;
backgroundWorker1.CancelAsync();
}
また、これが関連する場合、私は持っています:
public delegate void UpdateTextCallback(string item);
これにより、上で見たようにUpdateText
とを呼び出すことができます。FinishedText
backgroundWorker1_DoWork
ExecuteAsync
私の質問では、このコンテキストでどのように使用できますか? 検索しましたが、役立つものが見つかりません。自分のコードに似た例が見つかりません。また、c# を初めて使用するため、必要なものに変換できません。
また、提案をお待ちしております。私のコードに非効率性が見られたり、そうでない場合は、喜んで提案を受け入れます。
ありがとうございました。