<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=59&amp;t=21169&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-08-30T20:25:07+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=59&amp;t=21169&amp;mode</id>
<entry>
<author><name><![CDATA[ciamciak]]></name></author>
<updated>2018-08-30T20:25:07+01:00</updated>
<published>2018-08-30T20:25:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211189#p211189</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211189#p211189"/>
<title type="html"><![CDATA[Re: C# - Jak z funkcji static wywołać niestatyczną funkcję?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211189#p211189"><![CDATA[
Aha faktycznie było już o tym, przy RS-sie rzeczywiście to ma sens.<br />Dzięki za linka.<br /><br />Pozdro<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1254">ciamciak</a> — 30 sie 2018, o 20:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2018-08-30T14:50:30+01:00</updated>
<published>2018-08-30T14:50:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211182#p211182</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211182#p211182"/>
<title type="html"><![CDATA[Re: C# - Jak z funkcji static wywołać niestatyczną funkcję?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211182#p211182"><![CDATA[
Ten sam problem był poruszany kilka razy na forum w temacie obsługi przesyłania danych po RS232 np. w poradniku Zielonej Żabki <!-- l --><a class="postlink-local" href="https://forum.atnel.pl/topic5520.html#p64783" >topic5520.html#p64783</a><!-- l -->. Tam też przy odebraniu danych i chęci ich zwizualizowania trzeba zrobić podobny myk. Dlatego warto zrozumieć zasadę działania, bo na pewno się przyda <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />.<br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 30 sie 2018, o 14:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[HomoChemicus]]></name></author>
<updated>2018-08-26T17:22:40+01:00</updated>
<published>2018-08-26T17:22:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211034#p211034</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211034#p211034"/>
<title type="html"><![CDATA[Re: C# - Jak z funkcji static wywołać niestatyczną funkcję?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211034#p211034"><![CDATA[
To do podstaw i wielowątkowości polecam tę książkę, o której wspomniałem.<br />Środowisko nie pozwala na bezpośrednią ingerencję jednego wątku w drugim, aby uchronić się przed różnymi błędami związanymi z równoczesnym dostępem do zmiennych. To tak w dużym uproszczeniu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10470">HomoChemicus</a> — 26 sie 2018, o 17:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ciamciak]]></name></author>
<updated>2018-08-26T16:25:24+01:00</updated>
<published>2018-08-26T16:25:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211031#p211031</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211031#p211031"/>
<title type="html"><![CDATA[Re: C# - Jak z funkcji static wywołać niestatyczną funkcję?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211031#p211031"><![CDATA[
No normalnie działa <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> <br />Dzięki wielkie za przykład.<br /><br />Czytałem, że to można jakoś delegatami zrobić, ale takiej konstrukcji na tą chwilę bym nie wykminił.<br />Co prawda nie bardzo kumam czemu te wątki się nie widzą, ale już mniej więcej wiem, w którą stronę iść.<br />Nom, czas zainwestować w jakąś książkę do c#, bo jednak netowe kursy tylko po łepkach o ten temat zahaczają.<br /><br />Pozdro<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1254">ciamciak</a> — 26 sie 2018, o 16:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[HomoChemicus]]></name></author>
<updated>2018-08-26T16:05:26+01:00</updated>
<published>2018-08-26T16:05:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211030#p211030</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211030#p211030"/>
<title type="html"><![CDATA[Re: C# - Jak z funkcji static wywołać niestatyczną funkcję?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211030#p211030"><![CDATA[
Pisane z palca bez testowania. Powinno działać.<br /><br />[syntax=csharp]using System;<br />using System.Collections.Generic;<br />using System.ComponentModel;<br />using System.Data;<br />using System.Drawing;<br />using System.Linq;<br />using System.Text;<br />using System.Windows.Forms;<br />using System.IO;<br /> <br /> <br />namespace Watcher3<br />{<br />    public partial class Form1 : Form<br />    {<br />        public Form1()<br />        {<br />            InitializeComponent();<br /> <br />            Init();<br />        }<br />        private void Init()<br /> <br />        {<br />           <br />            FileSystemWatcher watcher = new FileSystemWatcher(@&quot;C:\test\&quot;);<br /> <br />            watcher.EnableRaisingEvents = true;<br />            watcher.IncludeSubdirectories = true;<br />           <br />            watcher.Changed += Watcher_Changed;  <br />            watcher.Renamed += Watcher_Renamed;<br />            watcher.Deleted += Watcher_Deleted;<br />            watcher.Created += Watcher_Created;<br /> <br />        }<br /><br />        delegate void SetTextCallback(string text);<br />       <br />        private void SetText(string text){<br />            if (this.richTextBox1.InvokeRequired)<br />            {<br />                SetTextCallback callback = SetText;<br />                this.Invoke(callback, new object&#91;&#93; { text});<br />            }<br />            else<br />            {<br />                richTextBox1.Text += text;<br />            }<br />        }<br /> <br />        private void Watcher_Created(object sender, FileSystemEventArgs e)<br />        {<br />            SetText(&quot;test&quot;);//String.Format(&quot;File: {0} created at time: {1}&quot;, e.Name, DateTime.Now.ToLocalTime());<br />        }<br /> <br />        private void Watcher_Deleted(object sender, FileSystemEventArgs e)<br />        {<br />            //Console.WriteLine(&quot;File: {0}  deleted at time: {1}&quot;, e.Name, DateTime.Now.ToLocalTime());<br />            SetText(&quot;test&quot;);<br />        }<br /> <br />        private  void Watcher_Renamed(object sender, RenamedEventArgs e)<br />        {<br />            //Console.WriteLine(&quot;File: {0} renamed to {1} at time: {2}&quot;, e.OldName, e.Name, DateTime.Now.ToLocalTime());<br />            SetText(&quot;test&quot;);<br />        }<br />        private void Watcher_Changed(object sender, FileSystemEventArgs e)<br />        {<br />            //Console.WriteLine(&quot;File: {0} changed at time: {1}&quot;, e.Name, DateTime.Now.ToLocalTime());<br />            SetText(&quot;test&quot;);<br />        }    <br />    }<br />}[/syntax]<br /><br />PS Polecam książkę C# 6.0. Kompletny przewodnik dla praktyków. Tam wielowątkowość jest bardzo ładnie opisana.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10470">HomoChemicus</a> — 26 sie 2018, o 16:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ciamciak]]></name></author>
<updated>2018-08-26T11:14:21+01:00</updated>
<published>2018-08-26T11:14:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211020#p211020</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211020#p211020"/>
<title type="html"><![CDATA[Re: C# - Jak z funkcji static wywołać niestatyczną funkcję?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211020#p211020"><![CDATA[
Problem się pojawił kiedy chciałem przeportować ten przykład na WF (program monitoruje zmiany plików w katalogu): <a href="https://msdn.microsoft.com/pl-pl/library/system.io.filesystemwatcher(v=vs.110).aspx?cs-save-lang=1&amp;cs-lang=csharp#code-snippet-2"  class="postlink">Link</a><br />Przerobiłem kod tak:[syntax=csharp]using System;<br />using System.Collections.Generic;<br />using System.ComponentModel;<br />using System.Data;<br />using System.Drawing;<br />using System.Linq;<br />using System.Text;<br />using System.Windows.Forms;<br />using System.IO;<br /><br /><br />namespace Watcher3<br />{<br />    public partial class Form1 : Form<br />    {<br />        public Form1()<br />        {<br />            InitializeComponent();<br /><br />            Init();<br />        }<br />        private void Init()<br /><br />        {<br />            <br />            FileSystemWatcher watcher = new FileSystemWatcher(@&quot;C:\test\&quot;);<br /><br />            watcher.EnableRaisingEvents = true;<br />            watcher.IncludeSubdirectories = true;<br />            <br />            watcher.Changed += Watcher_Changed;   <br />            watcher.Renamed += Watcher_Renamed;<br />            watcher.Deleted += Watcher_Deleted;<br />            watcher.Created += Watcher_Created;<br /><br />        }<br />       <br /><br />        private void Watcher_Created(object sender, FileSystemEventArgs e)<br />        {<br />            richTextBox1.Text += &quot;test&quot;;//String.Format(&quot;File: {0} created at time: {1}&quot;, e.Name, DateTime.Now.ToLocalTime());<br />        }<br /><br />        private void Watcher_Deleted(object sender, FileSystemEventArgs e)<br />        {<br />            //Console.WriteLine(&quot;File: {0}  deleted at time: {1}&quot;, e.Name, DateTime.Now.ToLocalTime());<br />            richTextBox1.Text += &quot;test&quot;;<br />        }<br /><br />        private  void Watcher_Renamed(object sender, RenamedEventArgs e)<br />        {<br />            //Console.WriteLine(&quot;File: {0} renamed to {1} at time: {2}&quot;, e.OldName, e.Name, DateTime.Now.ToLocalTime());<br />            richTextBox1.Text += &quot;test&quot;;<br />        }<br />        private void Watcher_Changed(object sender, FileSystemEventArgs e)<br />        {<br />            //Console.WriteLine(&quot;File: {0} changed at time: {1}&quot;, e.Name, DateTime.Now.ToLocalTime());<br />            richTextBox1.Text += &quot;test&quot;;<br />        }    <br />    }<br />}[/syntax]<br />Jak widać pokasowałem static z eventów. No i wszystko się kompiluje, ale wystąpienie eventu powoduje błąd:<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />System.InvalidOperationException: „Nieprawidłowa operacja między wątkami: do formantu 'richTextBox1' uzyskiwany jest dostęp z wątku innego niż wątek, w którym został utworzony.”<br /></div>Później się kapnąłem, że w przyborniku też jest FileSystemWatcher i on tworzy już niestatyczne eventy, które działają poprawnie z WF.<br /><br />Ale tak na przyszłość fajnie by było wiedzieć jak ze statycznej funkcji odpalić niestatyczną?<br />Albo jak odpalić np. ten FileSystemWatcher bez stawiania tego obiektu na formę, tak żeby generował niestyczne eventy?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1254">ciamciak</a> — 26 sie 2018, o 11:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[HomoChemicus]]></name></author>
<updated>2018-08-26T09:10:27+01:00</updated>
<published>2018-08-26T09:10:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211018#p211018</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211018#p211018"/>
<title type="html"><![CDATA[Re: C# - Jak z funkcji static wywołać niestatyczną funkcję?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=211018#p211018"><![CDATA[
Skoro masz taki problem, to znaczy, że masz problem z architekturą projektu. Niech event nie będzie statyczny.<br /><br />Jak wrzucisz projekt to zobaczę co się dzieje, chociaż od dawna nie miałem styczności z WF.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10470">HomoChemicus</a> — 26 sie 2018, o 09:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ciamciak]]></name></author>
<updated>2018-08-23T16:44:08+01:00</updated>
<published>2018-08-23T16:44:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=210951#p210951</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=210951#p210951"/>
<title type="html"><![CDATA[C# - Jak z funkcji static wywołać niestatyczną funkcję?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21169&amp;p=210951#p210951"><![CDATA[
Cześć<br /><br />Potrzebuję z eventu, który jest funkcją statyczną, wywołać niestatyczną, ale coś nie idzie.<br />Jak próbuję np.[syntax=csharp]private static void test()<br />        {<br />            richTextBox1.Text += &quot;test11&quot; + '\n';<br />        }[/syntax]<br />to dostaje:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Dla niestatycznego pola, metody lub właściwości „Form1.richTextBox1” wymagane jest odwołanie do obiektu.<br /></div><br />Wyczytałem, że trzeba zrobić coś takiego:<br />[syntax=csharp]private static void test()<br />        {<br />            Form1 frm = new Form1();<br />            frm.richTextBox1.Text += &quot;test11&quot; + '\n';<br />        }[/syntax]<br />Wtedy niema niby błędu, ale funkcja nic nie wypisuje.<br />Czyli w skrócie w takim kodzie, Button3 działa, a Button2 nie.:[syntax=csharp]private static void test()<br />        {<br />            Form1 frm = new Form1();<br />            frm.richTextBox1.Text += &quot;test11&quot; + '\n';<br />        }<br /><br />        private void Button2_Click(object sender, EventArgs e)<br />        {<br />            test();<br />        }<br /><br />        private void button3_Click(object sender, EventArgs e)<br />        {<br />            richTextBox1.Text += &quot;test22&quot; + '\n';<br />        }[/syntax]<br /><br /><br />Przypuszczam, że to dlatego, że ten obiekt frm jest niezależny od tego, na którym leży moje pole tekstowe i dlatego nic nie widać.<br />Ale jak w takim razie powinno się takie rzeczy realizować?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1254">ciamciak</a> — 23 sie 2018, o 16:44</p><hr />
]]></content>
</entry>
</feed>