Gå til innhold

trenge seg innpå dispose eventet i C#


Anbefalte innlegg

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
Videoannonse
Annonse

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 av The Jackal
Lenke til kommentar

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

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 av HDSoftware
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...