Autor Beitrag
aloneboy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Fr 05.09.14 19:34 
Hallo zusammen,

ich öffne aus Form1 Form2, von Form2 wird Form3 geöffnet, wenn ich über einen Button Form3 mit this.close(); schließe wird/sollte Form2 durch ein Event auch geschlossen werden.
Dazwischen kommt aber immer wieder dieser Ausnahmefehler und das komische dabei ist, er sagt das ich lbl_VerkäuferNr ändern wollte, doch an diesem Label wird nie etwas versucht zu ändern.
Wie komme ich dazu den Fehler zu finden und zu beheben ausser mit CheckForIllegalCrossThreadCalls = false;


Ein Ausnahmefehler des Typs "System.InvalidOperationException" ist in System.Windows.Forms.dll aufgetreten.

Zusätzliche Informationen: Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement lbl_VerkäuferNr erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.

danke

Gruß Oly

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 05.09.14 19:38 
Nur durch öffnen und schließen von Formen bekommt man keine threadübergreifenden Vorgänge.
Wo kommen bei dir Threads ins Spiel?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 05.09.14 19:43 
Hallo,

ich denke, die Fehlermeldung wird wohl schon so stimmen. Schau dir einfach mal den Stacktrace (Aufrufstapel) im Visual Studio an, wenn die Exception erscheint - dann kannst du mit einem Doppelklick zu der aufrufenden Methode (in deinem Code) springen.

Benutzt du denn irgendwelche Threads (oder Tasks oder ein sonstiges asynchrones Ereignis) in deinem Programm?
Zur Behebung schau dir mal diesen Artikel an (aus dem myCSharp-Forum): Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)
aloneboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Fr 05.09.14 20:02 
@Ralf: Wenn kein automatischer Thread eröffnet wird ausser von der Hauptform, dann kann ich es nicht sagen, ich habe bewusst keinen Thread eröffnet.

@th69: könntest DU mir bitte sAGEN WIE ICH DEN Aufrufstabel finde?

PS: Sorry, ich bin noch nicht lange dabei C# zu programmieren von daher ist es auch ziemlich schwer den Link zu verstehen, den hatte ich mir gestern schon mal angesehen.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 05.09.14 20:09 
Dann zeig uns ein wenig Code.

Zumindest den Teil wo du die anderen Formen erzeugst, wie du die Formen miteinander bekannt machst so das die sich kennen bzw. denn Teil wo du denn Event zum schließen verdrahtest und denn Code zum schließen der Formen.
aloneboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Fr 05.09.14 20:11 
wenn der Fehler erscheind, wird im Designer der Form 3

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
protected override void Dispose(bool disposing)
{
    if (disposing && (components != null))
    {
        components.Dispose();
    }
    base.Dispose(disposing);   <---------- diese Zeile grün makiert
}


Moderiert von user profile iconTh69: C#-Tags hinzugefügt
aloneboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Fr 05.09.14 20:32 
Form1:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
Form2.FormClosed += new FormClosedEventHandler(Timer_neu_starten);
                 
Form2.Show();
Form2.Location = new Point((this.Width / 2 - Form2.Width / 2) + this.Left, (this.Height / 2 - Form2.Height / 2) + this.Top);
Form2.Owner = this;

Form2:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Form_Auftrag_abschließen Auftrag_abschließen;

private void btn_abschließen_Click(object sender, EventArgs e)
{
    Auftrag_abschließen = new Form_Auftrag_abschließen();

    Auftrag_abschließen.FormClosed +=new FormClosedEventHandler(Formgeschlossen);
    Auftrag_abschließen.Owner = this;
    Auftrag_abschließen.lbl_NachrichtNr.Text = lbl_NachrichtNR.Text;
    Auftrag_abschließen.Show();
    Auftrag_abschließen.Location = new Point((this.Width / 2 - Auftrag_abschließen.Width / 2) + this.Left, (this.Height / 2 - Auftrag_abschließen.Height / 2) + this.Top);
}

private void Formgeschlossen(object sender,EventArgs e)
{           
    this.Close();
    FormClosed -=new  FormClosedEventHandler(Formgeschlossen); 
}

Form3:
ausblenden C#-Quelltext
1:
2:
3:
4:
private void btn_Abschluß_Click(object sender, EventArgs e)
{
    this.close();
}


Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 05.09.14 20:37 
Timer_neu_starten klingt verdächtig.

Auch wenn der Handler an FormClosed hängt ist da noch irgendwo ein Timer im Spiel? Wenn ja welcher Typ.
aloneboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Fr 05.09.14 20:40 
Die Idee hatte ich auch bereits,
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
public void Timer_neu_starten(object sender,EventArgs e)
{//aktualisiert die Dategridviews
            
    //timer_Meine_Aufträge.Interval = 1;
    //timer_Auftragsbestand.Interval = 1;
    //FormClosed -= new FormClosedEventHandler(Timer_neu_starten);
}

deshalb zur Probe auskommentiert, dennoch kommt der Fehler

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 05.09.14 20:44 
Kontrollier nochmal dein Code. Wenn du den Timer aus dem System.Timers Namespace benutzt so wird dessen Elapsed Event in einem anderen Thread gefeuert. Wenn du eine Form aus diesem Event versuchst zu closen oder disposen wird das zu dem von dir beobachteten Fehler führen.
aloneboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Fr 05.09.14 20:47 
das ist ein Timer Control auf Form1
und der Fehler würde dennoch auftreten, selbst wenn alles auskommentiert ist?
aloneboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Fr 05.09.14 20:48 
System.Windows.Forms.Timer
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 05.09.14 20:49 
Der Timer ist unverdächtig der arbeitet ohne Threads.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 05.09.14 20:54 
Dann sind wir jetzt an dem Punkt den user profile iconTh69 schon erahnt hat. Wir brauchen den Stacktrace.

Wenn du dein Programm mal debuggst und nochmal bis zum Fehler laufen lässt sollte dann ja in Visual Studio ein Dialog angezeigt werden mit den Fehlerdetail. Unten auf dem Dialog sollte sich ein Link "Copy exception detail to the clipboard" (oder das deutschsprachige Äquivalent) befinden. Benutz den mal und paste das Ergebnis dann hier rein.
aloneboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Fr 05.09.14 20:58 
ich habe den ganzen Text gepostet, darunter erscheint nur noch Unterbrechen und weiter, ignorieren ist ausgeblendet.

Das Programm lief im Hintergrund auch weiter, der Timer wurde ausgelöst. Das Programm endet sobald ich ein Button klicke
aloneboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Fr 05.09.14 21:27 
Das müsste der Stacktrace sein
ausblenden volle Höhe Quelltext
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:
[Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_abschließen.Dispose(bool disposing) Zeile 20  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Dispose(bool disposing) Zeile 20  C#
   [Externer Code]  
>  WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_bearbeiten.Formgeschlossen(object sender, System.EventArgs e) Zeile 135  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Form_Auftrag_abschließen.btn_Abschluß_Click(object sender, System.EventArgs e) Zeile 117  C#
   [Externer Code]  
   WindowsFormsApplication2.exe!WindowsFormsApplication2.Program.Main() Zeile 21  C#
   [Externer Code]


Moderiert von user profile iconTh69: Code-Tags hinzugefügt
aloneboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Fr 05.09.14 21:29 
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
private void Formgeschlossen(object sender,EventArgs e)
{          
    //this.Close();   <-------Zeile 135
    FormClosed -=new  FormClosedEventHandler(Formgeschlossen);
   // this.Dispose();        
}

wenn ich diese Zeile auskommentiere, kommt der Fehler nicht aber die Form schließt sich logischerweise nicht, was sie aber soll

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Fr 05.09.14 21:47 
Also ich kann nix ungewöhnliches entdecken. Ist das der komplette Stacktrace? Hast du vielleicht noch ein Form_Auftrag_bearbeiten_Close Event eingebaut indem du etwas machst? Ich bin mir nicht sicher, aber ist es normal das 20x der gleiche Aufruf im Stacktrace steht?

PS: Bitte benutze Code-Tags (cs) Dein Code (/cs). Ersetzte die Klammern () mit Eckigen []

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
aloneboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Fr 05.09.14 22:06 
Nein, normal bestimmt nicht. Deshalb habe ich das this.close aus Zeile 135 mal auskommentiert. Form3 wird geschlossen, form2 bleibt auf. Ich habe zumindest nichts gefunden, sieht fast wie eine Endlosschleife aus die unterbrochen wird.

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
aloneboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Fr 05.09.14 22:14 
Form_Auftrag_bearbeiten ist Form2 und da ist das event das der timer neu gestartet wirdd