Avatar billede peterfa Nybegynder
15. april 2008 - 16:30 Der er 4 kommentarer

Afbryde dll interop kald

Hej

Har en .net windows service skrevet i C#. I den har jeg en tråd der udfører noget arbejde ved at kalde en unmanaged dll vba [DllImport / interop. De udførte operationer kan tage ret lang tid (20 min).

Problemet er nu at jeg, hvis servicen bliver stoppet, gerne på pæn vis vil kunne afbryde interop kaldet, for derefter at kalde en hurtig udført clean-up metode så der er rydet pænt op. Nogen forslag  til hvordan man kan gøre det? Har overvejet om man kan udføre dette arbejde i et seperat AppDomain og så slå det ihjel, men jeg ved endnu ikke så meget om hvordan det fungerer.
Avatar billede arne_v Ekspert
15. april 2008 - 16:49 #1
Hvilken form for cleanup skal der laves ?

Almindelig memory og aabne database connections boer jo frigives naar processen
lukkes ned.

Hvis den kode slet ikke er skrevet til at kunne haandtere at blivet draebt, saa
skal du jo lave oprydningen i din egen C# kode.

Kunnne det evt. vaere en mulighed at flytte dette arbejde fra en separat traad
til en separat process - og saa bare lade den koere faerdig ? (kommunikation
kunne laves via noget message queue)
Avatar billede peterfa Nybegynder
16. april 2008 - 13:34 #2
Det externe lib er microsofts wimgapi. De funktioner jeg anvender kan også aktiveres igennem et command line tool, og der kan man uden (umiddelbart observerbare) problemer godt terminere processen ved ctrl+c, og derefter frigive resourcerne ved brug af en anden kommando. Pt gør jeg det at min service ved startup spammer løs af disse oprydningskommandoer hvilket da også virker. Vil bare hellere rydde op med det samme.

Det er ikke en option at lade en seperat process køre færdig, idet jeg skal holde styr på de filer der produceres af wimgapi, og det er lidt besværligt hvis der pludseligt dukker resultater op startet før servicen blev genstartet.
Avatar billede peterfa Nybegynder
16. april 2008 - 13:35 #3
Plus at min service pt bliver slået ned frem for selv at lukke pænt =)
Avatar billede arne_v Ekspert
17. april 2008 - 01:19 #4
Har du prøvet det oplagte:

t.Abort();
t.Join();
// cleanup

?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester