Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Синхронный вывод в textBox


Автор: BrookBond 17.11.2013, 13:03
Приветствую знатоков!

Для доступа из другого класса (который занимается только вычислениями) к объекту textBox я его передаю в конструктор этого класса. А в классе вычислений создаю новый объект textBox. Таким образом класс вычислений получает доступ к объекту другой формы. 
Но данные появляются в textBox не сразу же как они посчитались и передались в textBox, а только после завершения программы. И иногда появляется ошибка:
System.OutOfMemoryException не обработано пользовательским кодом
Message=Выдано исключение типа "System.OutOfMemoryException".
вот в этом месте

Код

textPeresech.Text += String.Format("{0}    {1}     {2:0.00}     {3:0.00}    {4}     {5}    {6}\n", 
           i, j, Obmen[j].x, Obmen[j].y, Obmen[j].n, Obmen[j].X0, Obmen[j].X1);

Где-то памяти не хватает.
Вопрос в том как сделать, чтобы данные отображались в textBox сразу же как только они вычисляются (синхронно, как в консоли посчитал - вывел)? 
Может использовать не textBox ?

Автор: dzaraev 19.11.2013, 12:48
Как-то всё очень очень мутно. Проще выложить работающий проект, воспроизводящий ошибку.

Цитата(BrookBond @  17.11.2013,  13:03 Найти цитируемый пост)
Но данные появляются в textBox не сразу же как они посчитались и передались в textBox, а только после завершения программы. 

Здесь мой мозг вообще остановился.

Автор: infarch 20.11.2013, 12:09
Меня вот это удивило:
Цитата(BrookBond @  17.11.2013,  13:03 Найти цитируемый пост)
А в классе вычислений создаю новый объект textBox

Если текстбокс уже есть то зачем создавать еще один?
По поводу обновления информации рискну предположить что все происходит в одном потоке: клик некоего контрола и следом за ним долгое вычисление которое подвешивает приложение. Если так то попробуйте потоки. Для простых решений есть компонент BackgroundWorker.

Автор: dzaraev 20.11.2013, 13:01
Цитата(infarch @  20.11.2013,  12:09 Найти цитируемый пост)
По поводу обновления информации рискну предположить что все происходит в одном потоке: клик некоего контрола и следом за ним долгое вычисление которое подвешивает приложение.

Судя по исключению OutOfMemoryException, дело не в потоках, а в памяти. Возможно какая-нибудь рекурсия бесконечная отожрала память в куче раньше, чем в стеке. Или даже без рекурсии, просто загрузил целиком большие файлы. Пока код не покажет, даже не берусь что-то конкретное предполагать.

Автор: infarch 20.11.2013, 13:44
Цитата(dzaraev @  20.11.2013,  13:01 Найти цитируемый пост)
Судя по исключению OutOfMemoryException, дело не в потоках, а в памяти

Ну, одно другому не мешает ) В общем, не видя кода приложения ничего сказать нельзя наверняка. Код в студию!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)