我是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#的新手,我无法将其转换为我想要的内容。
而且,我愿意接受建议,如果你发现我的代码效率低下或者什么不行,我会很乐意接受你的建议。
谢谢。