C# Graphics(GDI)

05/22/2013 04:16 BladeTiger12#1
Hallo zusammen,

ich habe mal wieder eine Frage und zwar:

Mein Code(kleiner Ausschnit) ist so:
Code:
Graphics Map;

public Form1()
{
    InitializeComponent();

     Map = Graphics.FromHwnd(this.Handle);
            
}

for (uint i = 0; i <= mlenght; i++)
{
        x = s.ReadOffset(POINTER, offsetsMonsterArrayX);
        y = s.ReadOffset(POINTER, offsetsMonsterArrayY);

        Map.DrawRectangle(Pens.Red, new Rectangle(x, y, 3, 3));

        offsetsMonsterArrayX[2] = i * 4;
        offsetsMonsterArrayY[2] = i * 4;
}
Alles wir gezeichnet.

[Only registered and activated users can see links. Click Here To Register...]

Die mlenght ist die Monster Anzahl der Map.
Die ist immer zwischen 160-170.

Wenn aber grad alle gezeichnet werden kann ich die GUI garnicht mehr
bewegen oder etwas drücken da sie abartig laggt.
Kann man das Problem irgendwie lösen?
Also damit es garnicht mehr so laggt und man etwas machen kann?

Bitte um hilfe :handsdown:.
05/22/2013 05:07 #SoNiice#2
Hast du es schonmal mit Direct2D oder GDI+ probiert, ób es dort genauso hängt? Ansonsten könnte ich dir XNA ans Herz legen, denn genau für solche Zeichnungen ist es einfach wie geschaffen.
05/22/2013 08:16 snow#3
Ich weiß nicht, ob .NET dir da bessere Alternativen bereitstellt, aber ich würde das ganze in einen neuen Thread hauen, so bleibt die Nachrichtenschleife etc. am Leben während des Zeichnens und das GUI dürfte wieder reagieren.
05/22/2013 12:04 Requi#4
Oder die unsaubere Art des Backgroundworkers nutzen.
05/22/2013 12:44 BladeTiger12#5
Danke an alle 3.
Ich werde alle 3 Möglichkeiten probieren.
Eine muss funktionieren:).
05/22/2013 14:35 kissein#6
Quote:
Originally Posted by BladeTiger12 View Post
Wenn aber grad alle gezeichnet werden kann ich die GUI garnicht mehr
bewegen oder etwas drücken da sie abartig laggt.
Kann man das Problem irgendwie lösen?
Benutz einen Timer mit ca. 1s Intervall und zeichne nur pro tick die form neu. Muss ja nicht in Echtzeit aktualisiert werden.
05/22/2013 14:41 dready#7
@kissein, threading und ggf nen puls der dafür sorgt das es nur alle x updated dürften aber sauberer sein :)
Ganz davon abgesehn, sich etwas mit Threading auseinandersetzen macht so oder so immer Sinn.
05/22/2013 14:50 kissein#8
geb ich Dir recht, wäre sauberer aber bei der Größe des Projekts Ressourcenverschwendung. Ist ja derzeit nur ein Ausgabefenster für 1 Grafik.
05/22/2013 15:48 nkkk#9
soweit ich weis sind die Sastem.Drawing klassen die C# version von GDI+. und solche sachen zu malen dürfte damit nicht lange dauern. Ich dewnke mal du hast den code wirklich irgendwo in einer endlosschleife.
05/23/2013 12:10 x]vIrus[x#10
zeichne ein bitmap im hintergrund und sende es an eine image control wenns fertig ist, sollte deine performance wesentlich verbessern