Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 08.06.2016
Сообщений: 117
1

Многопоточность форм

21.06.2016, 23:36. Показов 1882. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет народ!

Пытаюсь написать программу в которой параллельно происходят некоторые вычисление, а результат можно было бы смотреть в разных окнах.

Для этого создал главное окно, в котором можно смотреть в textbox состояние вычисление и дополнительное окно NextForm1 где отражается чарт (NextForm1.chart1) вычислений, это окно открывается путём клика по кнопки в главном окне и второе окно с кнопкой для второй программы вычисления.

Задачу пытался решить двумя путями:
1. Написать класс который бы запускался из-под main или главной формы и в потоке делал вычисления и из этого классс менял бы значение textbox и графика.
2. Вычисления запускались бы в дополнительном окне где график и от туда бы меняли textbox в основном окне.

Но первый вариант не сработал, потому что я так и не понял, как поменять значение из под отдельного класса содержание элемента texbox1 и чарт в дополнительной форме и при условии что NextForm1.Show(); не сотрёт всё.
А второй вариант у меня не вышел потому что при каждом вызове NextForm1.Show(); метод в форме запускался снова и останавливался при выходе.

Вопрос один, как лучше организовать архетиктуру для моей задачи, а второй где можно почитать примеры по много поточности, формам и взаимосвязи между ними (управление переменными и элементами друг друга)?

Спасибо большое, заранее благодарен за ваш ответ!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.06.2016, 23:36
Ответы с готовыми решениями:

Многопоточность форм
namespace thread { public delegate void change(string data); public partial class MainForm...

BackgroundWorker. Многопоточность. Как запустить несколько форм?
Имеется - главная форма - "Main.cs". - форма с "progressBar" - "progressBar.cs" ...

Передать из форм 1, в форм 3.
я перелазил весь форум но так и непонял как передать инфу с textbox3 в textbox1. (из 3 формы в...

Многопоточность в C#
Всем доброго времени суток! Я с толкнулся с проблемой с которой сам никак не могу разобраться, суть...

18
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
21.06.2016, 23:40 2
MDI уже было?
0
0 / 0 / 1
Регистрация: 08.06.2016
Сообщений: 117
21.06.2016, 23:57  [ТС] 3
Нет, но для меня желательней если бы окна открывались отдельно, но если легче сделать внутренние окна то рассмотрю, вопрос как. Я просто серверным кодингом в основном занимаюсь, поэтому здесь по некоторым вещам немного не в курсе.
0
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
22.06.2016, 00:02 4
http://www.codeproject.com/sea... kw&x=0&y=0
0
0 / 0 / 1
Регистрация: 08.06.2016
Сообщений: 117
22.06.2016, 00:14  [ТС] 5
А на описание на русском есть, что бы я смог понять как к моей задачи вообще можно перекрутить этот подход?

хотя отдельные окна меня больше устроили, с ними мою задачу не как нельзя связать? так что бы программы работали параллельно и могли общаться с окнами, а доп окна как бы были запущенны в фоновом режиме и строили график, а по клику кнопки открывались и отражали эти графики.
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,658
Записей в блоге: 14
22.06.2016, 04:57 6
RomanSSS, Литература по C# для начинающих и не только, Шилдт, главы 23-24.
0
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
22.06.2016, 11:09 7
Лучший ответ Сообщение было отмечено Даценд как решение

Решение

Цитата Сообщение от RomanSSS Посмотреть сообщение
написать программу в которой параллельно происходят некоторые вычисление, а результат можно было бы смотреть в разных окнах.
1) Создайте класс, который будет производить вычисления. Создайте у него событие, которые будет вызываться, когда получены какие-то промежуточные(?) результаты.
2) Запустите вычисления в отдельном потоке.
3) Создайте формы, которые могут брать промежуточные данные у класса (обратите внимание - не класс должен вызывать формы, а формы должны сами брать данные у класса!).
4) Обновляйте содержимое форм в главном потоке - по таймеру либо по событию класса.
Цитата Сообщение от RomanSSS Посмотреть сообщение
классс менял бы значение textbox и графика.
Класс не должен ничего знать о формах.
Цитата Сообщение от RomanSSS Посмотреть сообщение
Вычисления запускались бы в дополнительном окне
Окно это визуальный компонент, предназначенный для взаимодействия с пользователем. Запускать вычисления в окне, это все равно что стирать в утюге. FAQ
0
0 / 0 / 1
Регистрация: 08.06.2016
Сообщений: 117
23.06.2016, 01:57  [ТС] 8
Я думал в C# с формами как то проще и можно из-под класса запущенного в потоке, обращаться к объекту любой формы

А примеры есть, повторюсь с формами я работаю в первые, поэтому если есть примеры просьба сбросить ссылку!
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,658
Записей в блоге: 14
23.06.2016, 04:43 9
Нигде не проще. Разве что в Qt, может быть.

Повторюсь, читайте литературу. Ссылка выше.
0
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
23.06.2016, 10:43 10
Цитата Сообщение от RomanSSS Посмотреть сообщение
Я думал в C# с формами как то проще и можно из-под класса запущенного в потоке, обращаться к объекту любой формы
Во-первых это ограничение не форм и не C#. Это ограничение WinAPI которое является однопоточным.
Во-вторых, вы поймите, что проблема не в том что бы обратиться к форме из класса. Это как раз не проблема. Проблема в том, что вы пытаетесь смешивать функционал вашей программы и интерфейс пользователя. Чего быть не должно. Разделение данных и интерфейса - это первая заповедь любой архитектуры. Разделите эти вещи и проблемы с обращениями к форме исчезнут сами собой.
1
911 / 815 / 333
Регистрация: 03.02.2015
Сообщений: 5,265
Записей в блоге: 9
23.06.2016, 12:57 11
Цитата Сообщение от RomanSSS Посмотреть сообщение
Я думал в C# с формами как то проще и можно из-под класса запущенного в потоке, обращаться к объекту любой формы
А примеры есть, повторюсь с формами я работаю в первые, поэтому если есть примеры просьба сбросить ссылку!
Есть видео https://www.youtube.com/watch?v=N6RNy3rPZpg
На данном форуме отличная статья Архитектура ПО в WinForms (FAQ & HowTo)
0
0 / 0 / 1
Регистрация: 08.06.2016
Сообщений: 117
24.06.2016, 00:09  [ТС] 12
В видео конечно чувак, совсем всё запутанно сделал, вот самый простой пример: http://kbss.ru/blog/lang_c_sharp/41.html
А товарищ выше предложил MDI использовать, а в этом методе какие преимущества, перед формами?
0
0 / 0 / 1
Регистрация: 08.06.2016
Сообщений: 117
25.06.2016, 00:36  [ТС] 13
Так в чём всё таки различи MDI и WF для моей задачи, я просто посмотрел примеры в youtube в MDI точно так же, нужно объявлять окна и так же они общаются как и в WF.
0
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
25.06.2016, 01:10 14
Цитата Сообщение от RomanSSS Посмотреть сообщение
Так в чём всё таки различи MDI и WF для моей задачи, я просто посмотрел примеры в youtube в MDI точно так же, нужно объявлять окна и так же они общаются как и в WF.
Да нет никакой разницы. MDI это просто разновидность интерфейса (кстати устаревшая и давно вышедшая из моды) при которой дочерние окна открываются внутри главного окна, а не снаружи. Вот и вся разница.
0
0 / 0 / 1
Регистрация: 08.06.2016
Сообщений: 117
25.06.2016, 03:41  [ТС] 15
Кстати вот сейчас пробую с чартом работать, он только с формой хочет дружить и как отдельным классом это собрать?
0
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
25.06.2016, 03:50 16
Цитата Сообщение от Storm23 Посмотреть сообщение
MDI это просто разновидность интерфейса (кстати устаревшая и давно вышедшая из моды)
И как теперь пишут? Можно пару примеров? Наверное я отстал от моды.
0
0 / 0 / 1
Регистрация: 08.06.2016
Сообщений: 117
25.06.2016, 03:52  [ТС] 17
Storm23, DataPlanner просто посоветовал.

Здесь получается нужно сделать два расчёта в двух разных потоках.

1я. Строит Чартинг - что бы в отдельном окне отражает.
2я. Делает расчёты, обмениваясь данными с чартом.
3я. Отражает расчёт на главной, просто итоговые цифры

1. и 2. работают непрерывна в разных потоках и должны обмениваться данными 3. просто отражает полученные данные от 2и.

Вот такой гемморой только в Виндовс можно встретить. В люникс взял сделал две функции в поток вставил и всё.
0
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
25.06.2016, 10:09 18
Цитата Сообщение от DataPlanner Посмотреть сообщение
И как теперь пишут? Можно пару примеров? Наверное я отстал от моды.
Ну откройте классические десктоп приложения и посмотрите

Сейчас в основном используют либо SDI (например MS Word, Notepad, Explorer), либо TDI (Notepad++), либо чаще всего TDI+SDI (Chrome, Photoshop, VisualStudio).

В SDI на каждый документ выделяется отдельное окно. При чем каждое окно имеет полнофункциональное меню. Типичный пример MS Word:
Многопоточность форм


В TDI+SDI документы расположены во вкладках главной формы, а при "вытягивании" вкладки из главного окна - открывается новое окно.

Chrome:

Многопоточность форм
Многопоточность форм


Photoshop:

Многопоточность форм


Разница бывает в том, отображается ли в новом окне полное меню или нет. В Chrome и MS Word - отображается, в Photoshop и VS - нет.

Примеров классического MDI в современном ПО я даже и не могу вспомнить. Только MS Excel, да и то там не совсем классический, потому что Excel допускает открытие документа в отдельном окне, листы документа организованы по TDI и кроме того, внутренние окна имеют свои кнопочки в таскбаре. По большому счету, если вы не знаете что там MDI, то его можно и не заметить.
3
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
25.06.2016, 12:38 19
Цитата Сообщение от Storm23 Посмотреть сообщение
Сейчас в основном
Спасибо за ответ! Действительно я отстал от моды.
0
25.06.2016, 12:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2016, 12:38
Помогаю со студенческими работами здесь

Многопоточность
Есть такой код: bool i = true; public void statrt() { ...

Многопоточность
Я много чего вычитал по этой теме,смотрел разные уроки,но я так и не понимаю.Как создаётся...

Многопоточность
Собсно захотел,что бы пакет отправлялся с разных прокси в разных потоках. метод имеет такой вид: ...

многопоточность
Привет подскажите возможно ли отслеживать проникновение посторонних программ через много поточность?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru