|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
Всем привет, нижеизложенная проблема в принципе должна встречаться практически в каждом WPF - проекте, однако не очень понятно как это реализовать с использование best-practice. Проблема: аснихронно выполнить какие-либо длительные операции при инициализации View. Кроме как использовать конструктор ViewModel я пока не могу прикинуть, но проблема -в нем нельзя await, и соответственно все операции приходиться делать синхронно. Да, есть кастомные реализации асинхронного конструктора от Стивена Клири Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
task.run тоже вариант не очень, потому что нужно контекст подгонять, чтобы gui нормально обновился. но для wpf данный способ реализации не очень подходит. Поделитесь опытом, кто как костылил асинхронные операции в конструкторе ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 11:16 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
не очень понял проблему и тем более, не понял, зачем пытаться замутить в конструкторе асинхронное выполнение, что мешает вызвать конструктор из асинхронного контекста. Для синхронизации с UI из другого потока, можно воспользоваться Диспатчером, только нужно заранее сохранить ссылку на него, так как для разных потоков разные диспатчеры возвращаются ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 11:39 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
vb_subtask.run тоже вариант не очень, потому что нужно контекст подгонять Ты про это? Код: c# 1.
Что за трудность? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 11:46 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
как-то так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 12:05 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
Petro123, Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 12:10 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
vb_sub, Тип коллекции? Observable? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 12:15 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
Roman Mejtes, Дай ему ссыль на твой пример биндинга. Если у него биндинг. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 12:17 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
vb_subкак-то так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Наконец то дождались ясного ТЗ. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 12:19 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
Petro123Roman Mejtes, Дай ему ссыль на твой пример биндинга. Если у него биндинг.про какой пример речь? :) в Binding'е есть параметр Async кстати :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 12:21 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
vb_sub Код: c# 1.
при Action не нужен invoke. Объяви лист в поле с гуи и заполни из потока. Потом через Action отправь событие: Список готов. Должно работать 99% )))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 12:24 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
Roman Mejtesпро какой пример речь? :)ты мне давал про ленивый биндинг в таблу. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 12:25 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
Roman MejtesBinding'е есть параметр Async кстати :)да. Итого уже 3 варианта решения) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 12:29 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
если Вы про IsAsync свойство биндинга, то по описанию из msdn оно обеспечивает асинхронный доступ к get. То есть IsAsync отработает в следующем случае Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
В случае, если заполняем коллекцию из конструктора я не уверен, что IsAcync отработает. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 12:46 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
vb_subя не уверен,у компа? Проверяй все 2 варианта. А я поищу ссыль на третий. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 13:36 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
vb_subкак-то так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
А чем плохо так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 14:42 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
Супер_Пав Код: c# 1. 2. 3. 4.
В Task.Run строчек меньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 15:25 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
Супер_Пав, плохо тем, что FakeObjList у тебя создается в рабочем потоке, а не в главном и при таком коде у тебя gui не обновится. То есть FakeObjList заполнится, а во вьюхе он не появится. То же самое и с task.run. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 15:52 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
Petro123vb_subя не уверен,у компа? Проверяй все 2 варианта. А я поищу ссыль на третий. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
так что bad practice. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 15:55 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
vb_sub, Во первых ворой метод проверяй. Во вторых, где ты читаешь настройки окна? Ширина, высота? Вот после всего и запуск await. OnLoad там или onShown. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 16:14 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
vb_subСупер_Пав, плохо тем, что FakeObjList у тебя создается в рабочем потоке, а не в главном и при таком коде у тебя gui не обновится. То есть FakeObjList заполнится, а во вьюхе он не появится. То же самое и с task.run. Хм... а для чего тогда INotifyPropertyChanged/OnPropertyChanged("FakeObjList")? Чаще всего использую именно такой подход. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 16:15 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
LR, Да. Открывается пустой грид и потом подбрасываются из потока данные. Событие срабатывает. Можно без них и 10 сек пустое окно, потом сразу все. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 16:20 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
vb_subСупер_Пав, плохо тем, что FakeObjList у тебя создается в рабочем потоке, а не в главном и при таком коде у тебя gui не обновится. То есть FakeObjList заполнится, а во вьюхе он не появится. То же самое и с task.run. Батенька, вам учить и учить еще. Я же не зря написал про INotifyPropertyChanged ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 16:40 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
Petro123vb_sub, Во первых ворой метод проверяй. Во вторых, где ты читаешь настройки окна? Ширина, высота? Вот после всего и запуск await. OnLoad там или onShown. Настройки окна нигде не читаю, использую MVVM. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 16:43 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
vb_subНастройки окна нигде не читаю, использую MVVM. В программе нет ни одной настройки, галки? Впрочем, если все на биндинге, то действительно. .... На ObservableCollection счас что не работает в ГУИ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 16:49 |
|
Асинхронный конструктор
|
|||
---|---|---|---|
#18+
vb_sub, Ты какого фига каждые полгода один и тот же вопрос задаешь? 20814728 Roman Mejtes, Извини, с Алексей К спутал тебя. ) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2018, 17:28 |
|
|
start [/forum/search_topic.php?author=%D0%B0%D0%B9%D0%BA%D0%B0&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
181ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 441ms |
total: | 756ms |
0 / 0 |