определить, когда uploadValues завершено?

#c# #php

#c# #php

Вопрос:

Я хочу отобразить окно сообщения после отправки данных в удаленный файл php..

PS: файл php возвращает строку «END», когда данные полностью обработаны

 if (1 == outputToGui)
{
    CompressFile("allFilesList.txt");

    byte[] allFilesList = File.ReadAllBytes("allFilesList.txt.gz");
    string URIx = "http://example.com/post.php";
    System.Collections.Specialized.NameValueCollection data = new System.Collections.Specialized.NameValueCollection();
    data.Add("serial", serial);
    data.Add("data", Convert.ToBase64String(allFilesList));
    using (WebClient tayba = new System.Net.WebClient())
    {
        try
        {
            tayba.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
            tayba.Proxy = null;
            tayba.UploadValues(URIx, "POST", data);
        }
        catch (Exception E) { }
    }
}
MessageBox.Show("upload completed"); // this message show up before the php file process the posted data sometimes.. ?!!!!
  

Проблема в том, что окно сообщения появляется до того, как файл php иногда обрабатывает отправленные данные .. ?!!!!

Комментарии:

1. вы не можете реализовать это с помощью async Task или чего-то подобного

2. Вы уверены, что код выполняется правильно? Если outputToGui значение не равно 1 или выдается исключение, вы быстро увидите окно сообщения. Может показаться, что он запускается до того, как вы получите ответ, даже если вы на самом деле не получаете ответа. Перейдите MessageBox.Show в if и не перехватывайте Exception . Таким образом, вы узнаете, есть ли проблема outputToGui или генерируется исключение.

Ответ №1:

Это потому, что операция является асинхронной. Загрузка может все еще выполняться при вызове messagebox.

Найдите в webclient событие правильного завершения и добавьте туда свое сообщение. META: _webClient.eventName = (отправитель, аргументы) => MessageBox .Показать («Та-да!»);

Назначьте прослушиватель событий перед началом загрузки.

Комментарии:

1. Разве это не UploadValuesAsync асинхронная версия? MSDN говорит UploadValues , что будет блокироваться во время выполнения? Я что-то здесь упускаю?

2. С предоставленной информацией не вижу никакой другой возможности, кроме outputToGui != 1 выброса or Exception .

3. Я думаю о том же.