VenomGameworld
Legacy Member
Hallo,
ik ben momenteel bezig met een projectje om de groottes van partities van de harde schijf grafisch voor te stellen. Het uitlezen werkt, maar wanneer ik threading gebruik om deze info om de x aantal seconden/minuten te updaten, krijg ik een error bij het opnieuw aanroepen van de onPaint-methode.
De error is de volgende:
InvalidOperationException was unhandled
Cross-thread operation not valid: Control 'Form1' accessed from a thread other than the thread it was created on
Dit is de code van de constructor:
Dit is de code van de overschreven onPaint-methode:
En dit is de code van de GetData-methode die in een nieuwe thread wordt uitgevoerd:
De error vindt plaats bij de this.Refresh();.
Is er iemand die weet hoe ik dit het best kan oplossen?
Alvast bedankt!
ik ben momenteel bezig met een projectje om de groottes van partities van de harde schijf grafisch voor te stellen. Het uitlezen werkt, maar wanneer ik threading gebruik om deze info om de x aantal seconden/minuten te updaten, krijg ik een error bij het opnieuw aanroepen van de onPaint-methode.
De error is de volgende:
InvalidOperationException was unhandled
Cross-thread operation not valid: Control 'Form1' accessed from a thread other than the thread it was created on
Dit is de code van de constructor:
Code:
Thread t1 = new Thread(new ThreadStart(GetData));
t1.Start();
paintDoorlopen = false;
Dit is de code van de overschreven onPaint-methode:
Code:
Color kleur = Color.FromArgb(73, 73, 73);
SolidBrush brush = new SolidBrush(kleur);
Bitmap afbeelding = new Bitmap(pad);
Graphics g = e.Graphics;
// Tekenen van kader
System.Drawing.Extended.ExtendedGraphics kader = new System.Drawing.Extended.ExtendedGraphics(g);
kader.FillRoundRectangle(brush, 15.5F, 2.5F, 220.5F, 50.5F, 10.5F);
// Tekenen van balk
kleur = Color.FromArgb(118, 118, 118);
brush = new SolidBrush(kleur);
g.FillRectangle(brush, 25.5F, 35.5F, 195.0F, 5.5F);
// Vullen van balk
g.FillRectangle(new SolidBrush(Color.FromArgb(123, 188, 235)), gebruik);
// Tekenen van pictogram
g.DrawImage(afbeelding, 2, 4);
// Tekenen van tekst
g.DrawString(vrij.ToString() + "G vrij van " + totaal.ToString() + "G - " + (gebruik.Width / 2) + "%",
new Font("Microsoft Sans Serif", 9), new SolidBrush(Color.White), 60.0F, 20.0F);
// Opruimen
//pad = null;
kader.Graphics.Dispose();
brush.Dispose();
afbeelding.Dispose();
g.Dispose();
En dit is de code van de GetData-methode die in een nieuwe thread wordt uitgevoerd:
Code:
if (paintDoorlopen == false)
{
paintDoorlopen = true;
Thread.Sleep(5000);
}
// ... nog wat code
this.Refresh();
Thread.Sleep(10000);
De error vindt plaats bij de this.Refresh();.
Is er iemand die weet hoe ik dit het best kan oplossen?
Alvast bedankt!