<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=434395&amp;view=findpost&amp;p=3895510</guid>
        <pubDate>Wed, 04 Oct 2023 04:09:47 +0000</pubDate>
        <title>Обновление графиков на вкладке и запись данных через заданный период</title>
        <link>https://forum.sources.ru/index.php?showtopic=434395&amp;view=findpost&amp;p=3895510</link>
        <description><![CDATA[Pit-Bul: Подход боюсь немного не правильный. У Вас данные генерятся непосредственно в потоке отображения, поэтому и тестовый пример получился неадекватным. Данные напряжений скорее всего будут приходить от какого либо устройства, либо по таймингу с самого устройства, либо по запросу вашей программы. В первом случае проще, потому как по приходу данных будет калбек, ну скажем от COM порта и по нему вы будете передавать данные для отображения пользователю, во втором случае надо будет создать поток (именно поток а не бекграунд воркер) чтобы из него дергать устройство на отдачу данных. И последнее, накопительный график в Вашем случае это зло, ибо думаю что данные вы будете наблюдать не минуту и не 2, а чарт имеет свойство при больших данных дико тормозить и лагать, поэтому лучше сделать скользящий буфер для отображения графика точек на 500.]]></description>
        <author>Pit-Bul</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=434395&amp;view=findpost&amp;p=3889937</guid>
        <pubDate>Mon, 24 Apr 2023 20:21:13 +0000</pubDate>
        <title>Обновление графиков на вкладке и запись данных через заданный период</title>
        <link>https://forum.sources.ru/index.php?showtopic=434395&amp;view=findpost&amp;p=3889937</link>
        <description><![CDATA[tumanovalex: Я попробовал предложенный Вами способ сброса данных - не получилось. Может быть я неправильно его использую? Прикрепил проект со сбросом по таймеру. Пока я не нашел также решение задачи синхронного обновления всех графиков.<br>
<span class="b-attach" data-size="15415" data-hits="103" data-attach-id="64886" data-attach-post-id="3889937">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3889937&amp;attach_id=64886' title='Скачать файл' target='_blank'>csFormsTest.zip</a> (, : 103)
		</span>]]></description>
        <author>tumanovalex</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=434395&amp;view=findpost&amp;p=3889528</guid>
        <pubDate>Sun, 16 Apr 2023 10:23:49 +0000</pubDate>
        <title>Обновление графиков на вкладке и запись данных через заданный период</title>
        <link>https://forum.sources.ru/index.php?showtopic=434395&amp;view=findpost&amp;p=3889528</link>
        <description><![CDATA[tumanovalex: Спасибо большое за желание помочь&#33; В программе я использую backgroundWorker и мне хотелось бы найти решение при его применении, чтобы не переделывать программу. Например, как-то подправить функцию backgroundWorker1_ProgressChanged, чтобы и при 0,01 обновление шло нормально. Мне не очень понятно, почему при использовании backgroundWorker при 0,1 графики обновляются нормально, а при 0,01 - нет. В программе количество графиков задается пользователем путем ввода нужного количества названий графиков в файле &quot;Названия графиков.txt&quot;, количество графиков может быть от 1 до 6. Ваше решение периодичности сброса данных попробую, надеюсь поможет. Надеюсь на Вашу помощь в исправлении программы.]]></description>
        <author>tumanovalex</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=434395&amp;view=findpost&amp;p=3889515</guid>
        <pubDate>Sat, 15 Apr 2023 14:23:04 +0000</pubDate>
        <title>Обновление графиков на вкладке и запись данных через заданный период</title>
        <link>https://forum.sources.ru/index.php?showtopic=434395&amp;view=findpost&amp;p=3889515</link>
        <description><![CDATA[MaIron: Не на 100% уверен, что правильно понял, но:<br>
<br>
Для решения проблемы с сбросом данных при долях секунды и синхронного обновления графиков при времени опроса 0,01 секунды в приложении на C# с использованием Windows Forms, можно воспользоваться следующими подходами:<br>
<br>
Для сброса данных при долях секунды можно использовать таймер, который будет запускаться каждый раз при определенном промежутке времени (например, 5 минут), и сбрасывать данные на вкладках. Для этого можно использовать класс System.Windows.Forms.Timer. Ниже приведен пример кода, который сбрасывает данные на вкладках каждые 5 минут:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">private Timer dataResetTimer;</div><div class="code_line">&nbsp;</div><div class="code_line">public Form1()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;InitializeComponent();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Инициализация таймера</div><div class="code_line">&nbsp;&nbsp; &nbsp;dataResetTimer = new Timer();</div><div class="code_line">&nbsp;&nbsp; &nbsp;dataResetTimer.Interval = 300000; // 5 минут в миллисекундах</div><div class="code_line">&nbsp;&nbsp; &nbsp;dataResetTimer.Tick += DataResetTimer_Tick;</div><div class="code_line">&nbsp;&nbsp; &nbsp;dataResetTimer.Start();</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">private void DataResetTimer_Tick(object sender, EventArgs e)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Сброс данных на вкладках</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Здесь можно добавить код для сброса данных на ваших вкладках</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Для синхронного обновления графиков при времени опроса 0,01 секунды можно использовать многопоточность. Можно создать отдельный поток для каждого графика и обновлять их данные в параллель. Для этого можно использовать класс System.Threading.Thread. Ниже приведен пример кода, который создает три потока для трех графиков и обновляет их данные в параллель:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">private Thread graphThread1;</div><div class="code_line">private Thread graphThread2;</div><div class="code_line">private Thread graphThread3;</div><div class="code_line">&nbsp;</div><div class="code_line">public Form1()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;InitializeComponent();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Инициализация потоков для графиков</div><div class="code_line">&nbsp;&nbsp; &nbsp;graphThread1 = new Thread(UpdateGraph1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;graphThread1.Start();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;graphThread2 = new Thread(UpdateGraph2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;graphThread2.Start();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;graphThread3 = new Thread(UpdateGraph3);</div><div class="code_line">&nbsp;&nbsp; &nbsp;graphThread3.Start();</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">private void UpdateGraph1()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;while (true)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Обновление данных графика 1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Здесь можно добавить код для обновления данных на вашем графике 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Thread.Sleep(10); // Задержка 10 миллисекунд</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">private void UpdateGraph2()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;while (true)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Обновление данных графика 2</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Здесь можно добавить код для обновления данных на вашем графике 2</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Thread.Sleep(10); // Задержка 10 миллисекунд</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">private void UpdateGraph3()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;while (true)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Обновление данных графика 3</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Здесь можно добавить код для обновления данных на вашем гра</div><div class="code_line">&nbsp;&nbsp; &nbsp;Thread.Sleep(10); // Задержка 10 миллисекунд</div><div class="code_line">}</div><div class="code_line">}</div></ol></div></div></div></div><br>
Обратите внимание, что в примере используется `Thread.Sleep(10)` для создания задержки в 10 миллисекунд между обновлениями данных на графиках. Вы можете настроить это значение в соответствии с вашими требованиями и производительностью вашей системы.<br>
<br>
Также не забудьте обновлять графики на форме из соответствующих потоков с помощью метода `Control.Invoke` или `Control.BeginInvoke`, так как обновление графиков должно происходить в главном потоке (потоке пользовательского интерфейса) при использовании Windows Forms. Ниже приведен пример кода, который обновляет график на форме из потока:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">private void UpdateGraph1()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;while (true)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Обновление данных графика 1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Здесь можно добавить код для обновления данных на вашем графике 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Обновление графика на форме в главном потоке</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;this.Invoke((MethodInvoker)delegate {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Здесь можно добавить код для обновления графика на форме</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;});</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Thread.Sleep(10); // Задержка 10 миллисекунд</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><br>
Аналогично можно обновлять графики на остальных вкладках из соответствующих потоков.<br>
<br>
Надеюсь, это поможет вам исправить вашу программу и достичь требуемого поведения сброса данных и обновления графиков в вашем приложении на C# с использованием Windows Forms.]]></description>
        <author>MaIron</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=434395&amp;view=findpost&amp;p=3889449</guid>
        <pubDate>Thu, 13 Apr 2023 10:16:11 +0000</pubDate>
        <title>Обновление графиков на вкладке и запись данных через заданный период</title>
        <link>https://forum.sources.ru/index.php?showtopic=434395&amp;view=findpost&amp;p=3889449</link>
        <description><![CDATA[tumanovalex: Приложение Windows Forms, Windows 10. В программе на вкладках соответственно задаются параметры, выводятся графики и измеренные (эмулируются) значения. При времени опроса каналов от 1 секунды и более данные сбрасываются через 5 минут, а при дробных значениях - данные вообще не сбрасываются. При времени опроса 0,1 секунда 3 графика выводятся синхронно, а при 0,01 секунде двигается только первый график, а 2 других замирают. Обновление графиков происходит только при переключении вкладок.  Подскажите, пожалуйста, как исправить программу, чтобы:<br>
- данные сбрасывались через заданный промежуток времени при долях секунды;<br>
- графики на вкладке изменялись бы синхронно при 0,01 секунде.<br>
Проект прикрепил.<br>
<span class="b-attach" data-size="15719" data-hits="94" data-attach-id="64870" data-attach-post-id="3889449">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3889449&amp;attach_id=64870' title='Скачать файл' target='_blank'>csFormsTest.zip</a> (, : 94)
		</span>]]></description>
        <author>tumanovalex</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	