C# StreamReader lukkning problem

Tags:    c#

Hej undskyld hvis jeg poster forkert er ny så er lidt usikker.

Jeg er igang med at lave et forsøg program. som skal con. til en server.

har fået den til at con. til serveren men når den skal lukkes kommer den med en fejl medelse som jeg ikke helt kan gøre mig klog på.

koden ser noglunde sådan her ud

Fold kodeboks ind/udCSharp kode 


meget simpel jep men jeg er ny så

hvis jeg lukker den nu ville den bare forsætte.
har prøvet

Fold kodeboks ind/udCSharp kode 


og meget andet. men den bliver ved med at sige

Der kunne ikke læses data fra transportforbindelsen: En blokeringshandling blev afbrudt af et kald til WSACancelBlockingCall.

så hvordan hunden jeg får løst det problem ved jeg snart ikke. så håber nogle kan sige mig hvad jeg kan gøre bedere så jeg kan lukke den ned uden den bare forsætter eller kommer med en fejl meddelse



7 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Kan du ikke prøve at poste hele din kode til programmet, hvis det ikke fylder for meget? For så vil jeg lige prøve at køre det hos mig. Har du prøvet at steppe igennem dit program omkring det punkt den smider fejlen? Evt. hvad står der i exception/inner exception?

Edit:
Fandt en tråd på StackOverflow, der forklarer hvorfor det sker:
http://stackoverflow.com/questions/31871/wsacancelblockingcall-exception



Indlæg senest redigeret d. 15.07.2012 11:56 af Bruger #6559
jeg glemte lige at der også er en design fil, men det går nok.


Det du kan gøre er at stoppe din tråd. Mener du kan kalde ctThread.Stop() når du lukker din form.

En måske mere korrekt måde er at i stedet for at sige while(true) så laver du en variable bool running, så sætter du den til false når du lukker din applikation (formen) og så burde den bryde løkken. Du skal bare huske og låse din variabel "running" for undgå problemer med 2 tråde der tilgår en variabel samtidig.

Eksempel:

Fold kodeboks ind/udCSharp kode 


Det er ikke testet, da jeg ikke har det hele. Er du i tvivl om det jeg har gjort så spørg :)

Edit:

jeg tror også man kan følgende (ligger tættere på det du har):

Fold kodeboks ind/udCSharp kode 




Indlæg senest redigeret d. 15.07.2012 16:01 af Bruger #6559
Hov i mit andet eksempel er det ikke meningen at running skal bruges. Har kuge fjernet det fra indlægget. jeg kan ikke teste solution da du har åbenbart har brugt Visual studio 2012, og jeg har kun 2010.



Hej Martin du må gerne se kildekoden. men den kan godt virke lidt rodet men kan hvis du kan se min fejl så ville jeg være glad.

Jeg er nybegynder så jeg har nok vaglt nogle løgsninger som folk ville ryste hovedet af. men alt virker næsten på nær lige det at lukke.

forklaring af kode.

når man åbner aktiveres Form1_Load

den åbner en ny form hvor man indtaster
server port user channel

og kalder start den tilslutter så med de vaglte indstillinger og når det er sket starter den modtag.

når man så lukkede forsatte prgrammet stadig så jeg prøvede (som du kan se) ved at kalde form_lukker som så bruger Close(); til de forskelige ting. men så kommer den med den fejl medelse.

Fold kodeboks ind/udCSharp kode 




Indlæg senest redigeret d. 15.07.2012 15:16 af Bruger #17305
Hmm så vidt jeg kan se har du brugt running i føglende steder.

liger oven over private string this_server;

i modtag
og i start
og i form_lukker.

Men den forsætter selvom man har lukket den ned.

Hvis du ville have hele coden ville jeg da gerne give dig den.

Koden er her. http://battelkamp.dk/c/




Uhh det virkede mange mange gange tak :)
Dejligt at det virkede når man har bøvlet med det i et stykke tid.

Nu er det føste gang jeg har stillet spøgsmål her. er der noget man skal gøre for at lukke et spøgsmål.

endnu engang tak




ved siden af indlæg i en tråd kan man vote en tråd op eller ned. Har en tråd været hjælpsom stemmer man den op. (Hvis en person har forslået noget som "er ude i hegnet" voter jeg ned) ellers lader en være med at vote på et indlæg :)



t