Hallo Leute,
ich beschäftige mich jetzt seit ein paar Tagen mit Threads und komme gerade nicht weiter.
Ich lasse eine Zeitaufwendige Methode in einem eigenen Thread laufen. Dieser Methode übergebe ich am Anfang zwei Parameter und lasse den Thread nach fertigstellung der Methode die Methode "Callbackhandler" aufrufen um mit der Codeverarbetung im MainThread fortzufahren. Nun schaffe ich es aber nicht den Returnwert (bool) von dem Thread zu erhalten bzw. diesen zu beenden.
Hier bekomme ich Folgende Fehlermeldung:
C#-Quelltext
1: 2: 3:
| bool allgood = GetDistinguishedNameAsync.EndInvoke(result); |
Ich fang mit der Fehlerbeschreibung leider nichts an und wenn ich im weiteren verlauf der Methode in meine textBox etwas schreiben möchte dann bekomme ich einen Fehler das ich das nur im MainThread kann - dachte da wäre ich nun / der zweite Thread wurde doch beendet?!
Hier nochmal der Code aufs wesentliche reduziert
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| public delegate bool AsyncDelegate(GetDistinguishedName.objectClass objectClass, ref ElementStruktur struktur);
private void button1_Click(object sender, EventArgs e) { AsyncDelegate GetDistinguishedNameAsync = new AsyncDelegate(GetDistinguishedName.GetObjectDistinguishedName);
IAsyncResult asyncResult = GetDistinguishedNameAsync.BeginInvoke(GetDistinguishedName.objectClass.user, ref Struktur1, new AsyncCallback(CallbackHandler), GetDistinguishedNameAsync); }
public void CallbackHandler(IAsyncResult result) { AsyncDelegate GetDistinguishedNameAsync = (AsyncDelegate)result.AsyncState;
bool allgood = GetDistinguishedNameAsync.EndInvoke(result);
} |
p.s.
Die Methode "GetObjectDistinguishedName" gibt einen bool zurück, Name ist etwas unglücklich gewählt
Edit1:
Habe nun herausgefunden das es am "ref" liegt. Verstehe zwar nicht wiso und wäre froh wenn mir das jemand erklären könnte aber ich hab die "Struktur1" nun nichtmehr übergeben und statdessen beim starten des zweiten Threads erzeugt und sie mir anschliesend als Rückgabeparam. ausgeben lassen
Habe aber nach wie vor das Problem das er scheinbar den Thread nicht beendet. Nach dem erfolgreichen ausführen von *.EndInvoke(result) mekert er trotzdem das ich auf Steuerelemente keinen Zugriff habe