Gå til innhold

trenge seg innpå dispose eventet i C#


Anbefalte innlegg

Skrevet

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.

Videoannonse
Annonse
Skrevet (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 av The Jackal
Skrevet

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

Skrevet (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 av HDSoftware
Skrevet

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..

Skrevet

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 ;-)

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...