|
|
|
Обработка в параллель C#
|
|||
|---|---|---|---|
|
#18+
Всем привет. Народ, подскажите, пожалуйста. Есть ситуация: В момент выбора в combobox значения (свойство comboBox1_SelectedIndexChanged) начинают работать 3 запроса, которые заполняют 3 другие комбобокса. В некоторых случаях они тормозят программулину, потому что работают последовательно. Подскажите, пожалуйста, как можно эти 3 запроса запускать параллельно в момент выбора? Может есть какие-либо мануалы? (Пожалуйста не предлагайте использовать google.ru или еще каким либо поисковиком, я постоянно им пользуюсь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2011, 10:24 |
|
||
|
Обработка в параллель C#
|
|||
|---|---|---|---|
|
#18+
Справка по AutoResetEvent/ManualResetEvent или BackgroundWorker ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2011, 11:17 |
|
||
|
Обработка в параллель C#
|
|||
|---|---|---|---|
|
#18+
полазить в неймспэйсе System.Threading ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2011, 11:18 |
|
||
|
Обработка в параллель C#
|
|||
|---|---|---|---|
|
#18+
Пытаюсь выделить поток... Пишу следующее Код: plaintext 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. Появляется ошибка: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "comboBox1" не из того потока, в котором он был создан. Как сделать правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2011, 18:22 |
|
||
|
Обработка в параллель C#
|
|||
|---|---|---|---|
|
#18+
форма.Invoke((MethodInvoker) delegate() { форма.comboBox3.....;..... }); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2011, 18:27 |
|
||
|
Обработка в параллель C#
|
|||
|---|---|---|---|
|
#18+
barrabasформа.Invoke((MethodInvoker) delegate() { форма.comboBox3.....;..... }); А можно это как то на моем примере показать??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2011, 08:53 |
|
||
|
Обработка в параллель C#
|
|||
|---|---|---|---|
|
#18+
нельзя обращаться к форме и компонентам из другого потока просто так, нужно через Invoke сделай не так. используй BackgroundWorker он проще. при начале выполнения блокируй изменения пользователем состояния обновляемого объекта (ведь пока ты всё не загрузил юзер еще раз может там чтото кликнуть в первом комбобоксе (например enable = false). в теневой обработке заполняй коллекцию компонентов и присваивай в e.Result по событию RunWorkerCompleted из e.Result заполняй свои комбобоксы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2011, 11:27 |
|
||
|
Обработка в параллель C#
|
|||
|---|---|---|---|
|
#18+
barrabasнельзя обращаться к форме и компонентам из другого потока просто так, нужно через Invoke сделай не так. используй BackgroundWorker он проще. при начале выполнения блокируй изменения пользователем состояния обновляемого объекта (ведь пока ты всё не загрузил юзер еще раз может там чтото кликнуть в первом комбобоксе (например enable = false). в теневой обработке заполняй коллекцию компонентов и присваивай в e.Result по событию RunWorkerCompleted из e.Result заполняй свои комбобоксы Спасибо за совет...в проблеме разобрался... Теперь проблема в следующем: В момент выбора в 1-м комбобоксе некоторых значений, программуля притормаживает. Притормаживает, как я понял, потому что в последний комбобокс тащится под 5000 записей. Можно ли как то увеличить скорость обработки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2011, 13:46 |
|
||
|
Обработка в параллель C#
|
|||
|---|---|---|---|
|
#18+
Игорь86barrabasнельзя обращаться к форме и компонентам из другого потока просто так, нужно через Invoke сделай не так. используй BackgroundWorker он проще. при начале выполнения блокируй изменения пользователем состояния обновляемого объекта (ведь пока ты всё не загрузил юзер еще раз может там чтото кликнуть в первом комбобоксе (например enable = false). в теневой обработке заполняй коллекцию компонентов и присваивай в e.Result по событию RunWorkerCompleted из e.Result заполняй свои комбобоксы Спасибо за совет...в проблеме разобрался... Теперь проблема в следующем: В момент выбора в 1-м комбобоксе некоторых значений, программуля притормаживает. Притормаживает, как я понял, потому что в последний комбобокс тащится под 5000 записей. Можно ли как то увеличить скорость обработки? а там нужны 5000 записей? как пользователь из них выберет нужную? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2011, 14:13 |
|
||
|
Обработка в параллель C#
|
|||
|---|---|---|---|
|
#18+
ну или тогда заполняй комбобоксы в dowork передай туда ссылку на form через аргумент потом form.Invoke((MethodInvoker) delegate() { form.comboBox2.Items.Add(...); }); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2011, 14:24 |
|
||
|
Обработка в параллель C#
|
|||
|---|---|---|---|
|
#18+
barrabasИгорь86пропущено... Спасибо за совет...в проблеме разобрался... Теперь проблема в следующем: В момент выбора в 1-м комбобоксе некоторых значений, программуля притормаживает. Притормаживает, как я понял, потому что в последний комбобокс тащится под 5000 записей. Можно ли как то увеличить скорость обработки? а там нужны 5000 записей? как пользователь из них выберет нужную? Да записи нужны. На комбобоксе стоит автозаполнение по LISTITEMS. Я решил немного по другому сделать. Не через потоки а в момент выбора в первом комбобоксе Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. я обрабатываю 3 свойства Код: plaintext 1. 2. 3. в каждой из данных процедур обрабатывается свой запрос. Как увеличить их время обработки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2011, 14:41 |
|
||
|
Обработка в параллель C#
|
|||
|---|---|---|---|
|
#18+
Игорь86barrabasпропущено... а там нужны 5000 записей? как пользователь из них выберет нужную? Да записи нужны. На комбобоксе стоит автозаполнение по LISTITEMS. Я решил немного по другому сделать. Не через потоки а в момент выбора в первом комбобоксе Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. я обрабатываю 3 свойства Код: plaintext 1. 2. 3. в каждой из данных процедур обрабатывается свой запрос. Как увеличить их время обработки? не использовать комбобокс или найти/написать нестандартный с виртуальным режимом, это когда не добавляются все itemы, а просто меняется текст в тех что отображаются по мере прокрутки. из 5000 записей визуально выбрать не реально (а заполнение занимает кучу времени). ты можешь наполнить массив значениями, поставить комбобокс и заполнять только при вводе первых букв ну или не комбобокс а текстбокс с автоподстановкой (свойства AutoComplete*). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2011, 15:48 |
|
||
|
Обработка в параллель C#
|
|||
|---|---|---|---|
|
#18+
и вообще тут есть форум по winforms , там больше людей которые могут помочь, они сюда не заходят просто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2011, 15:51 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37166990&tid=1343068]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
174ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 534ms |

| 0 / 0 |
