Hi, folgendes ist mir aufgefallen:
Ich habe ein WPF-Projekt erstellt und in diesem ein eigenes Control erstellt.
In diesem Control werden banal Rechtecke gezeichnet. Dies geschieht dadurch, dass die 'OnRender'-Methode überschrieben wird. Alles in allem funktioniert dies sehr gut und ist auch hinreichend schnell.
Aber: Obwohl das Zeichnen der Recktecke sehr schnell geht, kann kurz nach dem Zeichnen die WPF-UI einige Sekunden nicht bedient werden.
Frage: Woran liegt dieses Verhalten? Oder mache ich hier was total falsches?
Hier der Code:
Imports System.Windows.Controls.Primitives
Public Class CustomControl1
Inherits System.Windows.Controls.Control
Dim sw As New Stopwatch
Dim AnzahlRechtecke As Integer
Shared Sub New()
DefaultStyleKeyProperty.OverrideMetadata(GetType(CustomControl1), New _
FrameworkPropertyMetadata(GetType(CustomControl1)))
End Sub
Protected Overrides Sub OnRender(drawingContext As DrawingContext)
MyBase.OnRender(drawingContext)
Dim myBrush As New SolidColorBrush(Colors.LimeGreen)
Dim myPen As New Pen(myBrush, 1)
Dim x, y As Integer
sw.Reset()
sw.Start()
AnzahlRechtecke = 0
For x = 0 To 120 - 1
For y = 0 To 90 - 1
drawingContext.DrawRectangle(myBrush, myPen, New Rect(8 * x, 8 _
* y, 5, 5))
AnzahlRechtecke += 1
Next
Next
sw.Stop()
Debug.WriteLine(Now & vbTab & AnzahlRechtecke & " Rechtecke gezeichnte" & _
"in " & sw.ElapsedMilliseconds & " ms")
End Sub
End Class <Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="800" Width="1024" _
xmlns:my="clr-namespace:TestWpfPerformance">
<Grid Name="Grid1">
<my:CustomControl1 HorizontalAlignment="Left" x:Name="CustomControl11" _
VerticalAlignment="Top" />
<Button Content="Button" Height="23" HorizontalAlignment="Left" _
Margin="869,21,0,0" Name="Button1" VerticalAlignment="Top" Width="75" _
Click="Button1_Click" />
</Grid>
</Window> Class MainWindow
Private Sub Button1_Click(sender As System.Object, e As _
System.Windows.RoutedEventArgs) Handles Button1.Click
CustomControl11.InvalidateVisual()
End Sub
End Class Gruß Dot 0 |