#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
выброса orException
.3. Я думаю о том же.