HDSoftware Skrevet 7. april 2014 Del Skrevet 7. april 2014 Heisan folkens Jeg har laget en kontroll som kan forhåndsvise filer på disken. Denne kontrollen er laget for WIN32 programmer. Kontrollen starter også opp en egentråd som tusler og går og dette virker helt perfekt til formålet. Nå skal jeg derimot bruke den samme kontrollen i mitt C# program og da begynner utfordringene. Når previewer kontrollen er oppe og går og jeg så stenger av programmet så fortsetter previewren å gå fordi denne går på en egen tråd. Dette er selvsagt helt som forventet og jeg vil gjerne sette en stopper for dette. Metodene jeg bruker fra WIN32 programmene er static metoder som kalles utenfra via et normalt WIN32 API. Jeg vil gjerne kalle dette innenfra .NET programmet også, men jeg greier ikke finne eventen som skal håndtere dette. Jeg har prøvd flere metoder her, bla. ~Preview() og denne blir ikek engang kallet. Sikkert noe med GC å gjøre. Jeg ønsker ikke å måtte kalle noe opprydding manuellt for slikt fører til fremtidige bøggs. Det jeg ønsker er å rydde opp i tråden Altså: Når FORM som har implementert kontrollen PreView lukkes så skal jeg kalle PreviewerClass.KillPreviwer(HandleToPreviewer); Tenkte også å hekte meg på Dispose i Formen, men da kreves det at dette gjøres på alle FORMS som bruker kontrollen. Altså - uaktuellt. Kontrollen må greie dette selv. Lenke til kommentar
The Jackal Skrevet 7. april 2014 Del Skrevet 7. april 2014 (endret) Det eneste riktige å gjøre her (om jeg forstår alt riktig), er faktisk å hooke deg på Dispose() I formen din og implementere IDisposable (om den ikke har det allerede) på kontrollen og kalle Dispose på kontrollen fra Dispose i formen. That's the .NET way, og å finne opp noe annet funky greier tviler jeg på at fører noe godt med seg. Endret 7. april 2014 av The Jackal Lenke til kommentar
The Jackal Skrevet 7. april 2014 Del Skrevet 7. april 2014 Som en liten addition her...om controllen din er implementert som en faktisk Control, så skal dispose kalles automagisk på den. Eneste du må gjøre er å override Dispose og frigjøre det du skal. Kikk litt her: http://stackoverflow.com/questions/3671013/does-form-dispose-call-controls-insides-dispose Lenke til kommentar
HDSoftware Skrevet 7. april 2014 Forfatter Del Skrevet 7. april 2014 Høres akkurat ut som hva jeg selv ville svart på frågan, det er bare det at DISPOSE metoden på en UserControl ikek er definert som Virtual og dermed vil det nok ikke lystre slik jeg ønsker. Ikke noe spesiellt jeg prøver å finne opp her annet en at jeg i en UserControll starter en tråd. Det er vel ikke noe u-dot-netsk ved dette. Siden formen som holder kontrollen ikke vet om denne tråden så vil jo ikke denne bli terminert når formen lukkes. Det må jo være en eller annen metode som rydder når en form lukkes. Eller er det rett og slett GC som gjør dette fordi CONTROLS i parent tømmes? Kaller ikke formen noe dispose aktige i det hele tatt på sine kontroller? Overrasker meg i såfall veldig Lenke til kommentar
HDSoftware Skrevet 7. april 2014 Forfatter Del Skrevet 7. april 2014 Merkelig. Den artikkelen du viser til sier jo at Dispose kan overrides. Hvorfor får jeg det ikke til da? MSDN sier jo til og med at den ikke er virtual Lenke til kommentar
HDSoftware Skrevet 7. april 2014 Forfatter Del Skrevet 7. april 2014 (endret) Veldig rart: Kjørte reflector på UserControl og fant ingen Dispose der. Men siden UserControl arver ContainerCXontrol så ser jeg at denne har DISPOSE protected override void Dispose(bool disposing) { if (disposing) { this.activeControl = null; } base.Dispose(disposing); this.focusedControl = null; this.unvalidatedControl = null; } Skulle jo tro dette ville la seg arve da, med mindre PROTECTED forhindrer dette da Endret 7. april 2014 av HDSoftware Lenke til kommentar
HDSoftware Skrevet 7. april 2014 Forfatter Del Skrevet 7. april 2014 Prøver og slenge inn IDISPOSABLE på min kontroll og ser om dette løser noe som helst.. Nope. Kalles ikke. Ikke det at jeg forventet det, men da er det i allefall prøvd.. Lenke til kommentar
HDSoftware Skrevet 7. april 2014 Forfatter Del Skrevet 7. april 2014 Hmmm. Fant ut av det. Jeg hadde wrappet kontrollen inne i en Panel og så jo på helt feil sted når jeg lette etter DISPOSE. Panelt blir kverket som det skal det. Var jeg som blingsa litt her :-D btw - takk for forsøket ;-) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå