hockey500 Skrevet 21. januar 2008 Del Skrevet 21. januar 2008 Hei! Si at jeg har en form som kjører i en evig paint-loop ved at jeg kaller this.Invalidate() nederst i OnPaint-metoden. Dette funker fint, helt til jeg bestemmer meg for å lage to instanser av denne klassen, da vil kun en av dem tegnes om gangen. Si for eksempel at OnPaint i Form1 ser slik ut: protected override void OnPaint ( PaintEventArgs e ) { base.OnPaint( e ); g = e.Graphics; size = g.MeasureString("tekst", font); g.TranslateTransform( this.Width / 2, this.Height / 2 ); g.RotateTransform( angle++ ); g.DrawString( "tekst", font, brush, new PointF(-(size.Width / 2), -(size.Height / 2)) ); Application.DoEvents(); this.Invalidate(); } Alt den koden gjør er å tegne "tekst" som roterer rundt. med denne Main-metoden funker det: static void Main () { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault( false ); using (Form1 f1 = new Form1()) { f1.Show(); Application.Run(); } } med denne gjør det ikke det: static void Main () { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault( false ); Form[] forms = new Form[ 5 ]; for (int i = 0; i < forms.Length; i++) { forms[ i ] = new Form1(); forms[ i ].Show(); } Application.Run(); } Så, hva kan jeg gjøre for å vise alle sammen samtidig, uten dette problemet? Lenke til kommentar
j000rn Skrevet 21. januar 2008 Del Skrevet 21. januar 2008 Lag hver form i en egen thread?` Lenke til kommentar
GeirGrusom Skrevet 22. januar 2008 Del Skrevet 22. januar 2008 Får ikke dette programmet til å kræsje? ville tro dette førte til stack overflow ganske raskt, da en funksjon ikke rekker å avslutte før den kaller seg selv... Bruk heller en loop et sted hvor du kaller invalidate. F.eks. kan du fjerne Application.Run, og heller lage din egen loop som kjører noe slikt: while(m_app_running) { Application.DoEvents(); form.Invalidate(); } Det application.Run gjør i all hovedsak, er å lage en loop som kjører Application.DoEvents og sjekke om eventuelt formen lukkes. Du må også passe på at TextRenderingHint står på AntiAlias eller ClearTypeGridFit hvis du bruker MeasureString, ellers vil MeasureString returnere feil størrelse. Lenke til kommentar
hockey500 Skrevet 22. januar 2008 Forfatter Del Skrevet 22. januar 2008 (endret) jorn: jeg prøvde dette, men da ble ikke formen vist. kan prøve litt mer. Vil det funke å bare kjøre i separate app domains? geir: Neida, programmet krasjer ikke. derimot krasjer din metode når jeg lukker formen, selv om jeg setter m_app_running=false i FormClosing. kan også prøve litt mer å sette opp loopen på den måten. Takk for de andre tipsene også, men du svarte egentlig ikke på det jeg spurte om. Har forøvrig sett andre sider som foreslår min loop-metode fremfor din, men hva er egentlig den praktiske forskjellen? EDIT: joda, med din måte funka det fint. problem solved! Endret 22. januar 2008 av hockey500 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å