Neues Fenster öffnen in Thread

Ich vergaß zu erwähnen das Du den Delegate auf dem MainForm mit Form.BeginInvoke invoken musst.
Und es ist absoluter Schwachsinn das Form in dem WorkerThread zu instanzieren.
Controls dürfen NUR dem Thread aus angesprochen werden, in welchem sie erstellt wurden.
[thread=219770]... wird im falschen Thread ausgeführt - Thread[/thread]
[thread=199136]Threading hilfe - Thread[/thread]

MfG, cosmo
 
Wiso sollte er es beim ersten mal nicht richtig laden?
Ich schätze er macht es jetzt bei dir nicht, weil er gestört wird. Und auserdem sollst du deine Form im MainThread aufrufen, und nicht im Thread selber, sondern da nur auf die Methode verweisen, und das nur einmal, schnell ausm Kopf:
Code:
deinThread()
{
...codesnippet
if(flag1 == false)
{
  methode1(); // und falls du deinen Thread in ner eigene Klasse laufen hast, mach ne instanz von deiner MainForm und ruf die Methode mittels
  mainForm.getInstance().methode1();
auf
}
}
public void methode1()
{
form1 f = new form1();
f.show();
flag = true;
}
So in diesem Stiel, hoffe du kommst dahinter, auf was ich rauswill
 
Das wird nicht so klappen und vor allem greifst ja von dem WorkerThread aus auf das MainForm zu. :eek:
Jetzt mal schnell geschrieben. Sollte gehen. :)
Code:
delegate void OpenFormDelegate();
OpenFormDelegate openFormDelegate = new OpenFormDelegate( openForm );

deinThread() {
	...codesnippet
	if(flag1 == false) {
		MyMainForm.BeginInvoke( openFormDelegate );
	}
}
public void openForm() {
	form1 f = new form1();
	f.show();
	flag = true;
}
MfG, cosmo

//Edit: Das ist auch noch nicht sauber. Definier dein neues Form in dem MainForm
und instanzier es in einer Methode des MainForms.
 
Zuletzt bearbeitet:
cosmochaosmaker hat gesagt.:
Ich vergaß zu erwähnen das Du den Delegate auf dem MainForm mit Form.BeginInvoke invoken musst.
Und es ist absoluter Schwachsinn das Form in dem WorkerThread zu instanzieren.
Controls dürfen
Code:
NUR
dem Thread aus angesprochen werden, in welchem sie erstellt wurden.
[thread=219770]... wird im falschen Thread ausgeführt - Thread[/thread]
[thread=199136]Threading hilfe - Thread[/thread]

MfG, cosmo

Scheint mir der richtige Weg zu sein, ich komme aber nicht dahinter.

Ich habe nun in der Klasse connUDP folgendes:

PHP:
public event EventHandler ReceivePackage;
public delegate void EventHandler(connUDP sender, string message);

Im Thread drin (wenn ich eine Message bekomme), dann rufe ich ReceivePackage(this, message auf).

In der Klasse Form1.cs öffne ich die Verbindung so:

PHP:
connUDP blah = new connUDP();
blah.ReceivePackage += new connUDP.EventHandler(receive);

Nun wird also die Methode recive in der Klasse Form1.cs aufgerufen wenn eine Nachricht kommt. Was muss ich nun mit BeginInvoke machen Vielen Dank schonmal :)
 
zioProduct hat gesagt.:
*EineHinterDieBackenGeb* :D
Du hast trotzdem innerhalb des Threads instanziert. :p
Und nicht für nötig erachtet ist keine Ausrede.

@aquasonic:
Invoke nun ReceivePackage auf dem MainForm
Code:
if ( ReceivePackage != null ) {
	 MyMainForm.BeginInvoke( ReceivePackage, new object[]{ this, "MyMessage" ) );
}
 
Zurück