ExecuteAsync RestSharp允许backgroundWorker CancellationPending c#

时间:2012-03-23 03:29:15

标签: c# backgroundworker blocking kill restsharp

我是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中的FinishedTextbackgroundWorker1_DoWork



对于我的问题,我如何在这种情况下使用ExecuteAsync?我搜索过但找不到任何可以帮助我的内容,我找不到类似于我的代码的例子,因为我是c#的新手,我无法将其转换为我想要的内容。

而且,我愿意接受建议,如果你发现我的代码效率低下或者什么不行,我会很乐意接受你的建议。

谢谢。

0 个答案:

没有答案