Регионы, Dispose

            GraphicsPath graphicsPath = new GraphicsPath();
            graphicsPath.AddPolygon(new Point[] {
                new Point(0, panelCorner.Height),
                new Point(panelCorner.Width, panelCorner.Height),
                new Point(panelCorner.Width, 0)
            });
            Region myRegion = new Region(graphicsPath);
            panelCorner.Region = myRegion;
            graphicsPath.Dispose();
            myRegion.Dispose(); //раньше работало, а теперь вызывает краш при появлении панели

Если убрать последнюю строчку, то работает. Но в MSDN не нашел (наверное, плохо читал), надо ли уничтожать GraphicsPath и Region, если регион был присвоен контролу.
На WinAPI не надо было (наверное, по-этому и крашится). А тут ещё GraphicsPath :thinking: Его надо диспозить или нет?

В чем логика уничтожать объект, ссылка на который только что присвоена в свойство, и видимо дальше будет использоваться?

Ну и про graphicsPath тоже странновато после передачи в конструктор, но как видно в исходниках, оно дальше не используется. https://referencesource.microsoft.com/#System.Drawing/commonui/System/Drawing/Region.cs,108

Если это происходит не 100500 раз в секунду, то можно не разбираться как надо, а просто ничего не делать, когда-нибудь после удаления ссылки из всех переменных вызовется финалайзер.

А почему бы и нет? :man_shrugging: Не факт, что переданный объект и дальше будет использоваться. В данном случае не ясно, Region будет уничтожен автоматически или его надо будет уничтожить вручную в конце программы.

То есть, так со всеми низкоуровневыми объектами? Font и Image тоже сами уничтожатся?
Я думал, это работает только с управляемым кодом.

Так а это что?)

class Region : MarshalByRefObject, IDisposable {
        ~Region() {
            Dispose(false);
        }