Kleine Frage
-
Hallo!
Erstmal ein Lob an das Board, finde ich super, dass man sich nicht registrieren msus um etwas zu posten und schonmal danke für die Hilfe
Also habe eine Windows Anwendung (Projekt -> Windows Anwendung) erstellt. In der "Main Funktion" rufe ich nun einen Thread auf, der in eine Textbox "test" schreiben sollte, ich bekomme jedoch immer den Fehler, dass der Thread nicht auf diese Textbox zugreifen darf, da diese Textbox mit der "Main Funktion" assoziiert ist und nicht mit diesem Thread.
Hoffe jemand kann mir helfen
Danke
-
Ja es ist so. Du darfst Controls nur mit dem erzeugendem Thread benutzen. Alles andere musst du dem Hauptthread kommunizieren, damit er das machen kann. Bei Controls siehe noch Control.Invoke().
-
Zu deiner Problem gibt es einen MSDN Artikel + Beispielcode
[MSDN: How to: Make Thread-Safe Calls to Windows Forms Controls]
http://msdn2.microsoft.com/en-us/library/ms171728.aspxDie weiterführenden Links am Ende des Artikels lohnen sich ebenfalls!
-
HAbe mir die MSDN Artikel mal durchgelesen und auch ausprobiert jedoch ist nichts zustande gekommen, was korrekt wäre
ich poste mal meinen code:
[cpp]
Main Funktion:
private void Form1_Load(object sender, EventArgs e)
{
Thread[] th = new Thread[1];
th[0] = new Thread(new ThreadStart(listen));
th[0].Start();
}
[/cpp]
Also so rufe ich die Funktion listen auf...Die Listen Funktion: void listen() { testbox1.Text = "Test"; }
Hier tritt dann der Fehler auf, dass es nicht erlaubt ist, von diesem Thread aus etwas in die TextBox zu schreiben^^ habe auch schon versucht das Zeugs von der MSDN einzuprogrammieren, aber bis jetzt ohne Erfolg
was muss ich wie im Code abändern?
-
HAbe mir die MSDN Artikel mal durchgelesen und auch ausprobiert jedoch ist nichts zustande gekommen, was korrekt wäre
ich poste mal meinen code:
private void Form1_Load(object sender, EventArgs e) { Thread[] th = new Thread[1]; th[0] = new Thread(new ThreadStart(listen)); th[0].Start(); }
Also so rufe ich die Funktion listen auf...
void listen() { testbox1.Text = "Test"; }
Hier tritt dann der Fehler auf, dass es nicht erlaubt ist, von diesem Thread aus etwas in die TextBox zu schreiben^^ habe auch schon versucht das Zeugs von der MSDN einzuprogrammieren, aber bis jetzt ohne Erfolg
was muss ich wie im Code abändern?
-
Servus,
gucke mal, so kannst du das machen:
public delegate void SetTextCallback(string text); private void SetRecieveText(string text) { if (this.textBox1.InvokeRequired) { SetTextCallback callback = new SetTextCallback(this.SetRecieveText); this.textBox1.Invoke(callback, new object[] { text }); } else { this.textBox1.Text = text; } } public void Mooh() { int sum = 0; for (int i = 0; i < 10; i++) { sum += i; } this.SetRecieveText(sum.ToString()); } private void button1_Click(object sender, System.EventArgs e) { Thread th = new Thread( new ThreadStart(Mooh) ); th.Start(); }
1. Du generierst ein delegate mit dem Übergabeparameter -> SetTextCallback
2. Du generierst eine Callback Funktion -> SetRecieveText
Darin überprüfst du ob Invoke benutzt werden muss und rufst callback auf
3. Von Thread aus rufst du nur noch SetRecievText auf.fertig *g*
Ist ein Beispiel aus der MSDN
mfg
Hellsgore
-
ich habe ein mathematisches problem zum einem und zum anderem kann ich das nicht umsetzen ich weis aber nicht wie ich das umsetzen soll.
folgendes problem:
es soll ein parkscheinautomaten programm entstehen.
beim einwerfen eines betrags soll errechnet werden wie lange ich stehen bleiben darf.in einer viertel stunde werden 50 cent fällig
höchst betrag ist 2€beispiel: wenn ich 1,85 eingebe wie lange darf ich stehen
könnt ihr mir bei der umsetzung helfen ich weis net wie das gehen soll.