ik zit met een probleempje, ik heb een class TDS_server gemaakt welke (in dit voorbeeld) enkel maar naar een nieuwe clientconnectie luisterd.
Indien deze een clientRequest ontvangt zou deze class een event moeten afvuren, dit gebeurd dan ook zoals bedoeld. TDS_server.cs
nu wil ik in de formclasse het event opvangen, deze gebeurd goed als ik het resultaat laat zien in een messagebox, maar als ik deze add bij een listbox dan krijg ik de volgende fout:
[error=C#]Cross-thread operation not valid: Control 'lstConnecties' accessed from a thread other than the thread it was created on[/error] Form1.cs
ik weet dat het iets is met de methode Invoke vanuit de mainThread maar ik geraak er niet uit hoe ik deze zou moeten implementeren. Het liefst zou ik deze dan ook als blackbox in de class TDS_server implementere zodat later niet teveel rotzooi in men formclasse heb.
--
heb ondertussen ontdekt dat deze fout zich niet optreed als ik start zonder debugging, wat is het verschil tussen opstarten met of zonder debugging, kan het kwaad als ik deze code zo laat voor wat het is? vanuit het exe bestand doet hij ook wat ik vraag.
--
merciekes voor uw vroege reactie
ik heb het geprobeerd om public te maken, maar dat werkt niet, het zou me tevens verbazen ook -> OnNewConnectionEventHandler(int i)" word nooit buiten de form aangeroepen he.
trouwens... ik heb onderaan mijn probleem nog wat toegevoegd wat ik zojuist ontdekte, als het geen erg kan dan mag het voor mij zo wel blijven.
Vanuit de code (het projectje) dat jij gaf is er geen fout te bekennen tijdens het Debuggen! Misschien moet je eens meer code of andere code geven waarbij die fout eventueel wel optreedt bij het Debuggen.
ja da was ik natuurlijk vergeten he. kan je zonder client natuurlijk niet testen. hieronder kan je het project downloaden.
na tds_server project te runnen gewoon bij chatclient op connectern klikken.
maar "start without debugging" of de exe zelf geeft geen foutmelding!!!! kan ik die code dan niet gewoon laten zoals het is, of kan deze uiteindelijk voor problemen zorgen..
Ik begrijp eigelijk niet goed het verschil tussen met of zonder debugging uitvoeren...
Abbas - 12/05/2009 21:51 (laatste wijziging 12/05/2009 21:51)
Crew .NET
Dit las ik op de ASP.NET Forums na een beetje zoeken op Google:
reply schreef:
tart with debugging, is the option, wherein you can pause the procesing of the code, at a certain break point, and then iterate through each step of the code, usually to check the processing of data. This method is usually helpful, when you do not get any error from the code, but the results are far from desired or expected. You can check the values of each variable, and properties of class while debugging.
Start without debugging, is to emulate the exact processing of the code. It is one single process, which gives you only the output, and you might now know the value of the variables during the processing, with the exceptions of using Response.Write(VariableName) at certain stages!
Apart from this difference, there is not other difference in the process!
If you use multithreading to improve the performance of your Windows Forms applications, you must make sure that you make calls to your controls in a thread-safe way.
Access to Windows Forms controls is not inherently thread safe. If you have two or more threads manipulating the state of a control, it is possible to force the control into an inconsistent state. Other thread-related bugs are possible, such as race conditions and deadlocks. It is important to make sure that access to your controls is performed in a thread-safe way.
It is unsafe to call a control from a thread other than the one that created the control without using the Invoke method
Het was dus niet veilig genoeg om de code zo te laten, het spijtige van de zaak is wel dat er toch meer code in de formclasse vereist, is, en daar houd ik niet van, maarja
't valt nog mee maar ik hou gewoon nie van spaghetti-code, liever de bussines-logica ergens anders wegstoppen.
idd veilig werken is belangrijker.
blij dat ik toch de moeite heb gedaan om jouw link te bestuderen, 't was nie weinig maar we leren er elke keer weer wa meer van he.