Информируйте форму непрерывно о прогрессе от другого класса - PullRequest
0 голосов
/ 19 января 2012

Я хочу загрузить файл в классе, который не знает о форме, в которой будет отображаться ход загрузки. Есть ли способ прохождения событий или делегат, чтобы как-то это проинформировать? в этот момент я могу установить прогресс напрямую, но я хочу сделать класс менее зависимым от реализации представления. спасибо

1 Ответ

1 голос
/ 19 января 2012

Определенно. Вам нужно будет реализовать какое-то событие «ProgressMade» в классе загрузки, на который форма затем подпишется (или будет подписано каким-либо посредником, например, Controller, если это ваш шаблон). Затем вы должны вызвать событие «ProgressMade», когда ваш класс обнаружит, что данные были отправлены.

То, как ЭТО происходит, зависит от того, что ваш класс использует для загрузки. Если вы используете StreamWriter, к сожалению, у этих классов нет «реактивных» событий, которые отслеживают прогресс. Еще не все потеряно; вы должны иметь возможность наследовать класс, который вы используете для запуска типа «WritePerformed», который вы можете использовать для запуска ProgressMade. Проверьте этот ответ: как увеличить прогрессбар, когда я пишу XML? . Это должно относиться практически к любому писателю. Если вы используете что-то менее абстрактное, например, Socket, тогда вы должны быть в состоянии отследить количество байтов, которые вы вставляете в соединение.

...