Tworzę Label
, a czasami używam .DrawToBitmap()
. Nie wiem dlaczego, ale po Im działa mój program na chwilę (i wywołanie .DrawToBitmap()
częściej) pojawia się wyjątek:DrawToBitmap - System.ArgumentException: Parametr jest nieprawidłowy
System.ArgumentException: Parameter is not valid.
at System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format)
at System.Drawing.Bitmap..ctor(Int32 width, Int32 height)
Jakoś nie może wywołać tę funkcję, które często. Jeśli bym radykalnie spróbował tego:
while(true)
{
System.Windows.Forms.Label label = new Label();
label.Font = new Font("Arial", 20);
label.Text = "test";
try
{
Bitmap image = new Bitmap(300, 500);
label.DrawToBitmap(image, label.ClientRectangle);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
Dostałem po 5-6 sekundach (1000-2000 połączeń) wyjątek. Jaki jest problem? Jak tego uniknąć?
Edytowanie: Dziękujemy za pomysł z Dispose()
- jakoś wszystko działa idealnie, jeśli używam go na label
. Nawet jeśli nie używam go w Bitmapie, to jest w porządku. Obie odpowiedzi są świetne, mogę jedynie przyjąć 1 z nich :(
cześć. Na początku próbowałem używać (Bitmap ...) => żadnych zmian. Ale kiedy używałem label.Dispose() na końcu każdego połączenia wszystko było w porządku :) Dziękuję - przetestowałeś to z 30.000 połączeń, myślę, że to w porządku teraz. Bez etykiety.Dispose() Otrzymuję wyjątek po 1000-2000 wywołań. Nigdy nie myślałem, że muszę się pozbyć() etykiety. – miri
@miri: Jak @HansPassant: Wydaje mi się, że wyrzucenie etykiety spowodowałoby wyjątek. Wierzę, że jest to czcionka i bitmapa, które powinny być zawijane w bloki 'używając'. Nie wiem, w jaki sposób można uciec z wyrzuceniem etykiety, nie widząc, w jaki sposób etykieta jest używana inaczej. – IAbstract