<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Πρώτα Βήματα - Desktop Applications</title><link>https://www.dotnetzone.gr:443/cs/forums/80/ShowForum.aspx</link><description>Θέματα για όσους φτιάχνουν τα πρώτα τους Desktop Applications σε .NET Framework</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: EventHanlder Crash</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/66394.aspx</link><pubDate>Mon, 27 Jun 2011 22:55:19 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:66394</guid><dc:creator>nuclear</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/66394.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=66394</wfw:commentRss><description>&lt;p&gt;Σε ευχαριστώ πολύ, θα το παλέψω.&lt;/p&gt;</description></item><item><title>Απ: EventHanlder Crash</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/66367.aspx</link><pubDate>Fri, 24 Jun 2011 01:09:43 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:66367</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/66367.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=66367</wfw:commentRss><description>&lt;p&gt;Βασικά, φαίνεται ότι χρησιμοποιώ ένα άλλο thread για να διαβάζω το output - είναι και προτινόμενος τρόπος για να κάνεις αυτό που θες. &lt;/p&gt;&lt;p&gt;Μαζί με το StreamReader θα μπορούσες να περάσεις και το object που θα ήθελες να λαμβάνει και να απεικονίζει το text - προσοχή η λειτουργία θα είναι cross-thread και μπορεί να σε δυσκολέψει...&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;George J.&lt;br&gt;&lt;/p&gt;</description></item><item><title>Απ: EventHanlder Crash</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/66366.aspx</link><pubDate>Fri, 24 Jun 2011 01:02:16 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:66366</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/66366.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=66366</wfw:commentRss><description>&lt;p&gt;Από παλιά υλοποίηση μου - περιέχει όλο το puzzle του να καλέσεις ένα πρόγραμμα σε DOS και να πάρεις το output του:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table border="0" cellSpacing="0" cellPadding="0" width="100%"&gt;&lt;tr style="line-height:normal;vertical-align:top;"&gt;&lt;td style="width:40px;text-align:right;"&gt;&lt;pre style="margin:0px;padding:2px;color:gray;font-family:courier new;font-size:11px;border-right-width:1px;border-right-style:solid;"&gt;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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
 &lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style="margin:0px;padding:2px 2px 2px 8px;"&gt;&lt;span style="color:black;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;public&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;static&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;class&lt;/span&gt; MediaController
{
	&lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
	&lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;/// Εκτελεί το ffmpeg με τις παραμέτρους που ορίζονται μέσα στο αντικείμενο MediaControllerArgs.&lt;/span&gt;
	&lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
	&lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;/// &amp;lt;param name="Args"&amp;gt;Η γραμμή εντολής του ffmpeg και οι παράμετροι που θέλουμε να του περάσουμε&amp;lt;/param&amp;gt;&lt;/span&gt;
	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;public&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;static&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;void&lt;/span&gt; RunCommand(MediaControllerArgs Args)
	{
		&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;if&lt;/span&gt; (&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;string&lt;/span&gt;.IsNullOrEmpty(Args.EncoderPath))
			&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;new&lt;/span&gt; ArgumentNullException(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"EncoderPath should not be null."&lt;/span&gt;);
		&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;if&lt;/span&gt; (&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;string&lt;/span&gt;.IsNullOrEmpty(Args.EncoderArgs))
			&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;new&lt;/span&gt; ArgumentNullException(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"EncoderArgs should not be null."&lt;/span&gt;);
		&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;if&lt;/span&gt; (&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;string&lt;/span&gt;.IsNullOrEmpty(Args.BinariesPath))
			&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;new&lt;/span&gt; ArgumentNullException(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"BinariesPath should not be null."&lt;/span&gt;);

		&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;using&lt;/span&gt; (Process p &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;new&lt;/span&gt; Process())
		{
			p.StartInfo.FileName &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; Args.EncoderPath;
			p.StartInfo.Arguments &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; Args.EncoderArgs;
			p.StartInfo.UseShellExecute &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;false&lt;/span&gt;;
			p.StartInfo.RedirectStandardOutput &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;true&lt;/span&gt;;
			p.StartInfo.RedirectStandardError &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;true&lt;/span&gt;;
			p.StartInfo.CreateNoWindow &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;true&lt;/span&gt;;
			p.StartInfo.ErrorDialog &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;false&lt;/span&gt;;
			p.StartInfo.WorkingDirectory &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; Args.BinariesPath;
			p.Start();

			StandardStreamReader outputReader &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;new&lt;/span&gt; StandardStreamReader(p.StandardOutput);
			StandardStreamReader errorReader &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;new&lt;/span&gt; StandardStreamReader(p.StandardError);
			Thread outputReaderThread &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;new&lt;/span&gt; Thread(&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;new&lt;/span&gt; ThreadStart(outputReader.Read));
			Thread errorReaderThread &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;new&lt;/span&gt; Thread(&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;new&lt;/span&gt; ThreadStart(errorReader.Read));
			outputReaderThread.Start();
			errorReaderThread.Start();

			p.WaitForExit();
			p.Close();

			Args.OutputConsole &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; outputReader.Output;
			Args.ErrorConsole &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; errorReader.Output;
		}
	}
}

&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;public&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;class&lt;/span&gt; MediaControllerArgs : EventArgs
{
	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;private&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;string&lt;/span&gt; _BinariesPath;
	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;private&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;string&lt;/span&gt; _EncoderArgs;
	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;private&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;string&lt;/span&gt; _EncoderPath;
	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;private&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;string&lt;/span&gt; _ErrorConsole;
	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;private&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;string&lt;/span&gt; _OutputConsole;

	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;public&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;string&lt;/span&gt; EncoderPath
	{
		get { &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;return&lt;/span&gt; _EncoderPath; }
		set { _EncoderPath &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; value; }
	}

	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;public&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;string&lt;/span&gt; EncoderArgs
	{
		get { &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;return&lt;/span&gt; _EncoderArgs; }
		set { _EncoderArgs &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; value; }
	}

	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;public&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;string&lt;/span&gt; BinariesPath
	{
		get { &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;return&lt;/span&gt; _BinariesPath; }
		set { _BinariesPath &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; value; }
	}

	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;public&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;string&lt;/span&gt; OutputConsole
	{
		get { &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;return&lt;/span&gt; _OutputConsole; }
		set { _OutputConsole &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; value; }
	}

	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;public&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;string&lt;/span&gt; ErrorConsole
	{
		get { &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;return&lt;/span&gt; _ErrorConsole; }
		set { _ErrorConsole &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; value; }
	}

	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;public&lt;/span&gt; MediaControllerArgs()
		: &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;base&lt;/span&gt;()
	{ }
}

&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;class&lt;/span&gt; StandardStreamReader
{
	&lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;// Fields&lt;/span&gt;
	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;private&lt;/span&gt; StringBuilder _reader &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;new&lt;/span&gt; StringBuilder();
	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;private&lt;/span&gt; StreamReader _stdReader;

	&lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;// Methods&lt;/span&gt;
	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;public&lt;/span&gt; StandardStreamReader(StreamReader sr)
	{
		&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;this&lt;/span&gt;._stdReader &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; sr;
	}

	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;public&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;void&lt;/span&gt; Read()
	{
		&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;int&lt;/span&gt; charCode &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; -1;
		&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;for&lt;/span&gt; (charCode &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;this&lt;/span&gt;._stdReader.Read(); charCode &amp;gt; 0; charCode &lt;span style="color:red;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;=&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;this&lt;/span&gt;._stdReader.Read())
		{
			&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;this&lt;/span&gt;._reader.Append(Convert.ToChar(charCode));
		}

		Thread.CurrentThread.Abort();
	}

	&lt;span style="color:green;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;// Properties&lt;/span&gt;
	&lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;public&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;string&lt;/span&gt; Output
	{
		get { &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;return&lt;/span&gt; &lt;span style="color:blue;font-family:Courier New;font-size:11px;font-weight:normal;background-color:transparent;"&gt;this&lt;/span&gt;._reader.ToString(); }
	}
}&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description></item><item><title>Απ: EventHanlder Crash</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/66362.aspx</link><pubDate>Thu, 23 Jun 2011 20:20:32 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:66362</guid><dc:creator>nuclear</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/66362.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=66362</wfw:commentRss><description>&lt;p&gt;Καταρχάς σας ευχαριστώ πολύ γιατί η βοήθειά σας ήταν καθοριστική και με καθοδήγησε ώστε να ξεκαθαρίσω πολλά θέματα.&lt;/p&gt;&lt;p&gt;Το αρχικό μου πρόβλημα ήταν όντως&amp;nbsp;τα διαφορετικά threads. Ο λόγος που δυσκολεύτηκα να το βρω είναι διότι το visual studio ΔΕΝ έβγαζε&amp;nbsp;exception και γινόταν kill της εφαρμογής χωρίς καμία&amp;nbsp;αναφορά σφάλματος.&amp;nbsp;Αν είναι θέμα ρυθμίσεων VS, του έχω τις τυπικές ρυθμίσεις εγκατάστασης.&lt;/p&gt;&lt;p&gt;Μάρκο ουσιαστικά αυτόν τον τρόπο χρησιμοποιώ αλλά με τα χρήσιμα link που έδωσες έμαθα και για το πολύ ενδιαφέρον &lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;RedirectStandardOutput. Παραθέτω το κομμάτι κώδικα και για άλλους χρήστες:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Consolas"&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span&gt;starteplus&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; StartEplus(&lt;span style="color:blue;"&gt;string&lt;/span&gt;
arguments)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;font-family:Consolas;font-size:9.5pt;"&gt;Νέα&lt;/span&gt;&lt;span style="color:green;font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt; process&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;Process&lt;/span&gt;
myProcess = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span&gt;Process&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;ProcessStartInfo&lt;/span&gt;
psi = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span&gt;ProcessStartInfo&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;font-family:Consolas;font-size:9.5pt;"&gt;//Όνομα εφαρμογής&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

 &lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;psi.FileName = &lt;span&gt;@"c:\eplus\RunEPlus.bat"&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;font-family:Consolas;font-size:9.5pt;"&gt;Παράμετροι&lt;/span&gt;&lt;span style="color:green;font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;
&lt;/span&gt;&lt;span style="color:green;font-family:Consolas;font-size:9.5pt;"&gt;εφαρμογής&lt;/span&gt;&lt;span style="color:green;font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;
&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;psi.Arguments = filename;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;Directory&lt;/span&gt;.SetCurrentDirectory(&lt;span&gt;@"c:\Test5\eplus1\"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;psi.RedirectStandardOutput = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;psi.UseShellExecute = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;font-family:Consolas;font-size:9.5pt;"&gt;Κρύβει&lt;/span&gt;&lt;span style="color:green;font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;
&lt;/span&gt;&lt;span style="color:green;font-family:Consolas;font-size:9.5pt;"&gt;το&lt;/span&gt;&lt;span style="color:green;font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt; dos window&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;psi.CreateNoWindow = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;myProcess.StartInfo = psi;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;myProcess.Start();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;myProcess.WaitForExit();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="color:blue;font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;string&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt; result =
myProcess.StandardOutput.ReadToEnd();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; result;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;font-size:9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;font size="2"&gt;Αυτά που διαβάζονται από το StandardOutput.ReadToEnd() είναι stream. Με τον παραπάνω τρόπο διαβάζεται το σύνολο του stream αφού τελειώσει και επιστρέφει ως string. Επειδή με αυτό τον τρόπο δεν γίνεται καμία ενέργεια έως ότου να τελειώσει η myprocess (και μπορεί να πάρει αρκετό χρόνο), πως μπορώ να παίρνω γραμμή-γραμμή και να τα δείχνω στο gui μου ή σε άλλο παράθυρο (δηλαδή αυτά που θα έδειχνε σε dos shell να τα δείχνει στο gui καθώς εξελίσσονται)?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;</description></item><item><title>Απ: EventHanlder Crash</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/66360.aspx</link><pubDate>Thu, 23 Jun 2011 06:05:28 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:66360</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/66360.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=66360</wfw:commentRss><description>Χμ... Πολύ ενδιαφέρον αυτό που προσπαθείς να πετύχεις. Μήπως, όμως, ακολουθείς λάθος δρόμο; Ύστερα από λίγο ψάξιμο "έπεσα" πάνω σ' &lt;a href="http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/9a399724-3ef3-4498-a64f-1b0d28aee51f"&gt;αυτή &lt;/a&gt;τη συζήτηση, ο οποία παραπέμπει σ' &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx"&gt;αυτή &lt;/a&gt;την πολύ ενδιαφέρουσα σελίδα του MSDN. Επίσης, θεωρώ ότι θα βρεις ενδιαφέρον και το άρθρο "&lt;a href="http://www.code-magazine.com/article.aspx?quickid=0403051&amp;amp;page=1"&gt;Managing Processes in .NET&lt;/a&gt;" στο Code Magazine.&lt;br&gt;</description></item><item><title>Απ: EventHanlder Crash</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/66359.aspx</link><pubDate>Thu, 23 Jun 2011 04:10:44 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:66359</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/66359.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=66359</wfw:commentRss><description>Αντί να ψάχνεις για bug του Visual Studio καλύτερα να κοιτάξεις τί σκάει. Διαφορετικά απλά μαντεύεις. Τί exception πέφτει? Το γράφεις πουθενά? Το σκάσιμο συμβαίνει και όταν κάνεις debug? Τί σου λέει?&amp;nbsp;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Αν το σκάσιμο συμβαίνει μόνο όταν τρέχει η εφαρμογή σου εκτός Visual Studio φρόντισε να βάλεις exception handlers και να γράψεις κάπου το exception, π.χ. σε ένα log file.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Και το FileSystemWatcher και το messagebox και όλα δουλεύουν πολύ καλά. Ούτε υπάρχει θέμα threading - εκτός και αν έχεις ξεκινήσει εσύ κάποιο thread ή χρησιμοποιείς ασύγχρονες κλήσεις. Από τη στιγμή όμως που δεν δίνεις κανένα απολύτως στοιχείο είναι αδύνατο να σε βοηθήσει κανείς. Το σίγουρο είναι πάντως ότι ΑΠΑΓΟΡΕΥΕΤΑΙ να φτιάξεις ένα control σε ένα thread (π.χ. στο main thread της εφαρμογής) και να πας μετά να το πειράξεις από άλλο (π.χ. μέσα από ένα ασύγχρονο delegate). Η απαγόρευση αυτή ισχύει από καταβολής Windows οπότε μιλάμε για περίπου 15-20 χρόνια.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Αν αυτή είναι η περίπτωση, θα πρέπει να ειδοποιήσεις το thread που έφτιαξε το control να κάνει την τροποποίηση αντί να το πειράξεις από το δεύτερο thread. Ο τρόπος που μπορεί να γίνει αυτό περιγράφεται στο &lt;a href="http://msdn.microsoft.com/en-us/library/ms171728(v=VS.100).aspx"&gt;How To : Make Thread-Safe calls to Windows Form Controls&lt;/a&gt;. Χονδρικά, καλείς την InvokeRequired επάνω στο control που θέλεις να πειράξεις και αν γυρίσει true καλείς την Invoke πάνω στο ίδιο control δίνοντας ως παράμετρο μία συνάρτηση η οποία πειράζει το control. Η Invoke θα αναλάβει να την καλέσει στο σωστό control. Όπως δείχνει και το παράδειγμα μπορείς να τα μαζέψεις όλα αυτά σε ένα απλό function όπως η SetText του άρθρου:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;delegate&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;void&lt;/span&gt; SetTextCallback(&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;string&lt;/span&gt; text);

&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;void&lt;/span&gt; SetText(&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;string&lt;/span&gt; text)
{
	&lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// InvokeRequired required compares the thread ID of the&lt;/span&gt;
	&lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// calling thread to the thread ID of the creating thread.&lt;/span&gt;
	&lt;span style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// If these threads are different, it returns true.&lt;/span&gt;
	&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;if&lt;/span&gt; (&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;this&lt;/span&gt;.textBox1.InvokeRequired)
	{	
		SetTextCallback d &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; SetTextCallback(SetText);
		&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;this&lt;/span&gt;.Invoke(d, &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;object&lt;/span&gt;[] { text });
	}
	&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;else&lt;/span&gt;
	{
		&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;this&lt;/span&gt;.textBox1.Text &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; text;
	}
}&lt;/span&gt;&lt;/pre&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Τέλος, θα πρότεινα να κοιτάξεις το documentation, τα How To και τα tutorials του MSDN αντί να ψάχνεις στο Internet τί λέει ο ένας και ο άλλος. Θα γλυτώσεις χρόνο και θα πελαγοδρομείς λιγότερο από το να προσπαθείς να καταλάβεις τί γράφει ο ένας και ο άλλος, ο οποίος μπορεί και να μην ξέρει και τί λέει. Όσο πιο έμπειρος είναι κανείς τόσο περισσότερο ανατρέχει στο documentation και το Help.&lt;/div&gt;</description></item><item><title>Απ: EventHanlder Crash</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/66358.aspx</link><pubDate>Thu, 23 Jun 2011 03:16:20 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:66358</guid><dc:creator>nuclear</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/66358.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=66358</wfw:commentRss><description>&lt;p&gt;Σκέφτηκα ότι ίσως να είναι θέμα threading οπότε έβαλα την εξής εντολή και δουλεύει καλά:&lt;/p&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;p&gt;CheckForIllegalCrossThreadCalls = false;&lt;p&gt;Από ότι γνωρίζω δεν πρέπει όμως να το απενεργοποιούμε γιατί είναι για να μας προστατεύει.&lt;p&gt;Πως είναι η σωστή προσέγγιση?&lt;p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ: EventHanlder Crash</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/66357.aspx</link><pubDate>Thu, 23 Jun 2011 03:02:03 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:66357</guid><dc:creator>nuclear</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/66357.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=80&amp;PostID=66357</wfw:commentRss><description>&lt;p&gt;Γράφω εδώ την απορία μου μιας και ταιριάζει με το πρόβλημα του g1024:&lt;/p&gt;&lt;p&gt;Από τη φόρμα μου κάνω instance μιας κλάσης η οποία ξεκινάει ένα 2ο λογισμικό προσομοίωσης (dos) το οποίο όταν τελειώσει δημιουργεί κάποια αρχεία. Για να γνωρίζω πότε τελείωσε η προσομοίωση πρόσθεσα στην κλάση ένα FileSystemWatcher για να παρακολουθεί πότε θα δημιουργηθεί το τελικό logfile και με ειδοποιεί με messagebox.&lt;/p&gt;&lt;p&gt;Έχω πειραματιστεί με διάφορες διατάξεις και ενώ κάποιες φορές έχει δουλέψει μια χαρά, δεν είναι αξιόπιστο (δουλεύει στο deleted και όχι στο created). Πρόσθεσα το FileSystemWatcher στην φόρμα μου μαζί με statusstrip&amp;nbsp;μήπως λειτουργήσει αξιόπιστα αλλά τότε κλείνει η εφαρμογή χωρίς μήνυμα λάθους όπως περιέγραψε ο g1024.&lt;/p&gt;&lt;p&gt;Ψάχνοντας διάβασα ότι το FileSystemWatcher δεν είναι αξιόπιστο αλλά πουθενά δεν βρήκα να τους πετάει έξω από την εφαρμογή χωρίς μήνυμα λάθους. Μετά σκέφτηκα μήπως φταίει το messagebox και το depedency στο System.Windows (τώρα ξεκινώ&amp;nbsp;προγραμματισμό και δεν κατάλαβα τι εννοεί) και το έβγαλα άλλα πάλι με πετάει.&lt;/p&gt;&lt;p&gt;Τελικά βρήκα ότι το messagebox δουλεύει καλά μέσα από τη φόρμα (deleted και created) αλλά με πετάει έξω όταν πάει στην εντολή:&lt;/p&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;p&gt;&lt;font color="#000000"&gt;statusStrip1.Text = "deleted";&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000"&gt;Δοκίμασα και με label και πάλι με πετάει χωρίς μήνυμα λάθους&lt;/font&gt;&lt;/p&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;p&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#000000"&gt;StatusLabel.Text = "deleted";&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#000000"&gt;Μοιάζει σαν bug του visual studio. Μήπως κάνω κάτι λάθος? &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#008000" size="2" face="Consolas"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;</description></item></channel></rss>