Похоже, вы пытаетесь избавиться от статического, что вызывает некоторые проблемы при следующем использовании:
Brush brush = Brushes.Black;
g.FillEllipse(brush, 3, 3, 2, 2); //Here the exception is thrown on the second call to the function
brush.Dispose(); //If i comment this out, it works ok.
Когда вы устанавливаете brush = Brushes.Black, вы фактически устанавливаете кисть как ссылку (или указатель) на статический Brushes.Black. Располагая им, вы фактически пишете:
Brushes.Black.dispose();
Когда вы возвращаетесь, чтобы снова использовать черную кисть, среда выполнения говорит, что вы не можете, потому что она уже удалена и не является допустимым аргументом для g.FillEllipse ()
Лучший способ написать это может быть просто:
g.FillEllipse(Brushes.Black, 3, 3, 2, 2);
Или, если вы хотите быть действительно сложным с этим:
Brush brush = Brushes.Black.Clone();
g.FillEllipse( brush, 3, 3, 2, 2 );
brush.Dispose();
Или, если вас не волнует, что вещи выглядят неправильно, просто закомментируйте кисть. Dispose (); строка в исходном коде.