VB.NET 2005, Seriel port, disponere problem, Windows CE

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skriver program til Windows CE, der skal arbejde med serielle porte. Jeg bruger objekt System.IO.Ports.SerialPort. Alt fungerer godt, men når jeg lukker programmet og åbner det igen, får jeg fejl: Port er i brug! I slutningen skriver jeg:


port.close()
port.dispose()


Og hvis jeg tilføjer dette:


System.GC.collect() 


.. end alt begynder at arbejde


Men problemet er, at computeren sidder fast, når der søges affaldssamler til hver port. Hvis jeg forsøgte at bruge kollektoren et andet sted, gør det ikke 'samle' porte, og de ligner brugt, hvis programmet starter igen.


Kan nogen hjælpe venligst?

Bedste reference


Det kan være, at en genstand, der ejer portobjektet, ikke er afsat eller stadig opretholder en reference. Det ville forklare hvorfor efter system.gc.collect () det virker.

Andre referencer 1


Der er et par mulige muligheder her. For det første, bare fordi du kalder Luk, betyder det ikke, at porten er fysisk frigivet - det gælder også i C. Det afhænger af UARTs tilstand og meget om, hvordan den faktiske driver blev skrevet. Det kan tage tid fra opkaldet til Close to the actual driver, der frigiver porten. Dette tror jeg, er det du faktisk ser på grund af dig, faktisk manuelt at ringe tæt på end at vente på, at Finalizer ødelægger din Port-instans og implicit lukker den - dette ville tage endnu længere tid.


Selvfølgelig forudsætter det, at dit Nære opkald rent faktisk bliver kørt. Hvis det ikke er tilfældet, skal du forstå, hvordan objektfinalisering fungerer i administreret kode. Dette har intet at gøre med OOP, det har at gøre med, hvordan hukommelsen styres. Når en genstand er uden for rækkevidde og ikke har flere rødder ( referencer) det er tilgængeligt for indsamling, men det betyder ikke, at det er straks frigivet. Faktisk kan det være lidt tid før finaliseringen kører, især hvis appen fortsætter med at løbe.

Andre referencer 2


Hvor længe venter du på at lukke den og åbne den? Ifølge MSDN: [4]



  Den bedste praksis til enhver ansøgning
  er at vente på en vis tid
  efter at have kaldt Luk -metoden før
  forsøger at kalde den åbne metode som
  Porten må ikke lukkes øjeblikkeligt.