Загрузка файлов в .net с помощью WebClient (и silverlight) - PullRequest
0 голосов
/ 20 мая 2010

У меня есть код, который я использую для загрузки файлов на мою страницу Ashx. Это прекрасно работает, хотя я не могу найти правильный способ получить сумму, которую он перечислил.

Телефонный код:

WebClient wc = new WebClient();
wc.OpenWriteCompleted += (s2, e2) =>
{
   PushData(e2.Result, offset);
   e2.Result.Close();
};
wc.OpenWriteAsync(ub.Uri);

Код данных push:

private void PushData(Stream output, long offset)
{
    byte[] buffer = new byte[4096];
    int bytesRead;
    bytesRead = theFileStream.Read(buffer, 0, buffer.Length);
    if (bytesRead != 0)
    {
        output.Write(buffer, 0, bytesRead);

        totalBytesDone += bytesRead;
        FireUpdateEvent(bytesRead);
    }
}

Приведенный выше код немного отличается от моего реального кода, для краткости. Теперь я предположил, что когда он достигнет output.Write(buffer,0,bytesRead);, это был тот момент, когда он отправлял реальные данные, и он блокировался и переходил к следующей строке только после того, как закончил писать этот раздел. Но это продолжается до totalBytesDone += bytesRead; до того, как что-то записано на сервер. Я предполагаю, что причина в том, что он выполняет запись в отдельном потоке в фоновом режиме (или я на самом деле смотрю на неправильный раздел кода, и он пишет в другом месте) - но для того, чтобы мой totalBytesDone код работал, я хочу заблокировать его до окончания отправки (я могу поместить это все в отдельный поток позже).

Я скачал множество примеров для этого, и они либо не работают должным образом с моим обработчиком файлов ashx (я не могу изменить его), либо они используют метод WebClient, который просто сообщает о прогрессе в 50%.

1 Ответ

0 голосов
/ 20 мая 2010

Взгляните на этот ответ .

...