Я новичок в 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
в этом контексте? Я искал, но не могу найти ничего, что могло бы мне помочь, я не могу найти пример, похожий на мой код, и, поскольку я новичок в С#, я не могу преобразовать его в то, что хочу.
А еще, я открыт для предложений, если вы видите какую-то неэффективность в моем коде или что-то еще, я буду рад принять ваши предложения.
Спасибо.