Hallo Leute,
ich programmiere erade an einem kleinen WinForms GDI+ Programm das ein interaktives GDI+ Tutorial werden soll.
Lief
alles eigentlich ganz, bis vor 2 Tagen. Ich bekam nachdem ich das
Interface IDisposable in die Basisklasse Shape eingebaut hatte für alle
Klassen die von Shape erben folgende Compiler Warnung:
Shape implementiert IDisposable und "SingleLine" ist die Klasse die von Shape erbt.
Ich
schaffe es einfach nicht diese Warnung loszuwerden. Habe ich
IDisposable falsch implementiert. Ich hab schon zig Beispiele gefunden
und alles mögliche ausprobiert (using... etc). Gegen Ende auch einfach
heuristrisch aber nichts klappt
Ich
halte es aber für wichtig diese auf diese Warnung zu reagieren und sie
nicht zu unterdrücken, da sonst der Speicher vielleicht vollaufen
könnte!
Wenn es gewünscht wird und weiterhilft poste ich auch den ganzen Source des kleinen Projekts und nicht nur Auszüge.
Vielen Dank für Eure Mühe und Hilfe vorab!
Shape:
Klasse SingleLine:
Aufruf:
Verzweifelt,
Duster
ich programmiere erade an einem kleinen WinForms GDI+ Programm das ein interaktives GDI+ Tutorial werden soll.
Lief
alles eigentlich ganz, bis vor 2 Tagen. Ich bekam nachdem ich das
Interface IDisposable in die Basisklasse Shape eingebaut hatte für alle
Klassen die von Shape erben folgende Compiler Warnung:
Warnung CA2213
"Form1" enthält das Feld "_line", das den IDisposable-Typ
"SingleLine" aufweist, aber nie verworfen wird. Ändern Sie die
Dispose-Methode in "Form1", um "Close" oder "Dispose" für dieses Feld
aufzurufen.
Shape implementiert IDisposable und "SingleLine" ist die Klasse die von Shape erbt.
Ich
schaffe es einfach nicht diese Warnung loszuwerden. Habe ich
IDisposable falsch implementiert. Ich hab schon zig Beispiele gefunden
und alles mögliche ausprobiert (using... etc). Gegen Ende auch einfach
heuristrisch aber nichts klappt
Ich
halte es aber für wichtig diese auf diese Warnung zu reagieren und sie
nicht zu unterdrücken, da sonst der Speicher vielleicht vollaufen
könnte!
Wenn es gewünscht wird und weiterhilft poste ich auch den ganzen Source des kleinen Projekts und nicht nur Auszüge.
Vielen Dank für Eure Mühe und Hilfe vorab!
Shape:
VB.NET-Quellcode
- Imports PensBrushesAndShapes.DataTypes
- Namespace ShapeTypes.BASE
- Friend Class Shape
- Implements IDisposable
- #Region "Shape Private Variables"
- Friend MyPen As Pen
- Private ReadOnly _penData as PenData
- #End Region
- #Region "Shape Constructors"
- Public Sub New()
- End Sub
- Public Sub New(penData As PenData)
- _penData = penData
- MyPen = GeneratePen(_penData)
- End Sub
- #End Region
- #Region "Shape Functions"
- Public Sub Dispose() Implements IDisposable.Dispose
- MyPen?.Dispose()
- End Sub
- Friend Function GeneratePen(penData As PenData) As Pen
- MyPen = New Pen(Color.FromArgb(penData.Alpha,
- penData.Red,
- penData.Green,
- penData.Blue), penData.Width)
- Return MyPen
- End Function
- #End Region
- End Class
- End NameSpace
Klasse SingleLine:
VB.NET-Quellcode
- Imports PensBrushesAndShapes.DataTypes
- Imports PensBrushesAndShapes.ShapeTypes.BASE
- Namespace ShapeTypes.Lines
- Friend Class SingleLine
- Inherits Shape
- #Region "CLASS SINGLELINE"
- #Region "SingleLine Private Variables"
- Private ReadOnly _e As PaintEventArgs
- Private ReadOnly _penData As PenData
- Private ReadOnly _coordinates As Point()
- #End Region
- #Region "SingleLine Properties"
- 'Shape.ShapeName = "SingleLine"
- #End Region
- #Region "SingleLine Constructors"
- Public Sub New()
- End Sub
- Public Sub New(e As PaintEventArgs, penData As PenData, coordinates As Point())
- _e = e
- _penData = penData
- _coordinates = coordinates
- DrawSingleLine(_e, _penData, _coordinates)
- End Sub
- #End Region
- #Region "SingleLine Functions"
- Private Function DrawSingleLine(e As PaintEventArgs, penData As PenData, coords As Point()) As PaintEventArgs
- Dim linePen As Pen
- linePen = GeneratePen (penData)
- linePen.DashStyle = penData.DashStyle
- linePen.StartCap = penData.StartCap
- linePen.EndCap = penData.EndCap
- e.Graphics.DrawLine(linePen, coords(0), coords(1))
- linePen.Dispose()
- Return e
- End Function
- #End Region
- #End Region
- End Class
- End Namespace
Aufruf:
VB.NET-Quellcode
- Protected Overrides Sub OnPaint(e As PaintEventArgs)
- MyBase.OnPaint(e)
- _cmdDrawState = True
- Dim typ as String
- typ = _penData.ShapeName
- Protected Overrides Sub OnPaint(e As PaintEventArgs)
- MyBase.OnPaint(e)
- _cmdDrawState = True
- Dim typ as String
- typ = _penData.ShapeName
- Select Case typ
- Case "SingleLine"
- _line = New SingleLine(e, _linePenData, _lineCoords)
- _line.Dispose()
- End Select
- End Sub
Verzweifelt,
Duster