13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
||||||
1 | ||||||
WinForms приложение и фоновая загрузка файлов через WCF28.02.2016, 13:15. Показов 1855. Ответов 9
Метки нет (Все метки)
У меня есть отдельный контракт для загрузки файлов.
Клиент я создаю, когда пользователь заходит на отдельную форму и нажимает кнопку загрузить. На главной форме нажимается кнопка->открывается форма загрузки->нажимается кнопка загрузки и в этой кнопке код такого вида:
Как можно исправить это? Хотелось бы, что бы после нажатия на кнопку загрузки, можно было бы закрыть форму и заняться другими делами, пока в фоне идет закачка.
0
|
28.02.2016, 13:15 | |
Ответы с готовыми решениями:
9
Идеалогически правильная работа с WCF-службой через WinForms приложение Загрузка больших файлов на сервер WCF Импорт данных из Excel в MS SQL через приложение WinForms EF/WCF Загрузка результата запроса через контекст в datatable затем в грид |
28.02.2016, 13:22 | 2 |
iluxa1810, я так понимаю, речь о Web-службе?
Тогда используйте асинхронную загрузку. Вы можете либо доверить Студии создать асинхронные методы (при добавлении ссылки на службу) либо написать асинхронный код самостоятельно. Что так, что эдак разницы никакой нет, в службе будут использоваться те же самые методы. Асинхронность реализуется на стороне клиента.
0
|
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
|
28.02.2016, 13:43 [ТС] | 3 |
insite2012, Да, речь о веб-службе.
Т.е если я вызываю метод загрузки асинхронно, то после закрытия формы он продолжит передавать файл? Еще вопрос, если можно: Как я могу передать в главную форму информацию о том, что передача завершена? Это через события реализуется?
0
|
28.02.2016, 13:50 | 4 |
Тут надо смотреть, ваша форма это основное окно или нет. Можно попробовать через потоковую передачу.
Да, при генерации через Студию это реализуется и через события. Зависит от студии. В 2010 версии делается двумя способами: через пару методов Begin()-End() и через метод и событие. В более старших, поскольку там есть поддержка async-await, через метод-событие и через async-await.
0
|
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
|
28.02.2016, 13:52 [ТС] | 5 |
0
|
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
||||||
28.02.2016, 14:23 [ТС] | 7 | |||||
insite2012, А примерчик можно?
Или достаточно нажатие кнопки пометит, как Async, а код в самой кнопки поменять на что-то вроде:
0
|
28.02.2016, 14:56 | 8 |
Вот архив. Естественно, в обеих формах нужно использовать одну переменную посредника, а не создавать ее по новой.
Для имитации я сделал задержку в методе в службе. Поскольку у меня 2010 Студия, я использовал связку событие+метод.
0
|
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
|
28.02.2016, 15:46 [ТС] | 9 |
insite2012, Спасибо!
Т.е получается, что с локальными прокси(На подчиненной форме) ничего подобного не прокатит? Просто, у меня 3 разных прокси, получается я их должен создавать на главной форме и передавать в конструкторы других форм?
0
|
28.02.2016, 16:27 | 10 |
Естественно нет. Для каждого прокси создается свой канал, свой экземпляр службы на стороне сервера (если только не используется синглет). А если служба сконфигурирована как уровня вызова, то и на каждый вызов создается свой экземпляр.
Добавлено через 2 минуты Но вы можете, к примеру, не закрывать дочерние формы, а скрывать их. А закрывать по событию окончания загрузки данных. Возможно, такой вариант вам подойдет.
0
|
28.02.2016, 16:27 | |
28.02.2016, 16:27 | |
Помогаю со студенческими работами здесь
10
Вызвать консольное приложение C# из проекта winforms и дать команду завершения также из winforms WCF WinForms +БД - нужен пример Высокая фоновая загрузка ЦП Фоновая загрузка изображений Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |