Столкнулся с InvalidOperationException: В данный момент объект используется другим процессом.
У меня есть форма и таймер, который ее обновляет.
Исключение возникает через некоторое время только при вызове метода Graphics.DrawString() с любыми аргументами.
Текст исключения:
System.InvalidOperationException: В данный момент объект используется другим процессом.
в System.Drawing.Graphics.CheckErrorStatus(Int32 status)
в System.Drawing.Graphics.DrawString(String s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format)
в System.Drawing.Graphics.DrawString(String s, Font font, Brush brush, Single x, Single y)
в WindowsFormsApplication5.Display.Display_Paint(Object sender, PaintEventArgs e) в C:\Users\admin\Documents\Visual Studio 2015\Projects\WindowsFormsApplication5\WindowsFormsApplication5\Display.cs:строка 33
в System.Windows.Forms.Control.OnPaint(PaintEventArgs e)
в System.Windows.Forms.Form.OnPaint(PaintEventArgs e)
в System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer)
в System.Windows.Forms.Control.WmPaint(Message& m)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ScrollableControl.WndProc(Message& m)
в System.Windows.Forms.Form.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Это при том, что потоки я не использую. По всей видимости в формах по дефолту есть два потока, которые одновременно просят перерисовать форму.
Форма:
public partial class Display : Form {
private double x, y;
private long time;
public Display() {
Bundle.init();
InitializeComponent();
DoubleBuffered = true;
}
private void timer_Tick(object sender, EventArgs e) {
Invalidate();
}
private void Display_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
g.DrawString("Test", Bundle.menuFont, Brushes.Black, Width / 2 - 195, Height / 2 + 55);
}
}
Ресурсы:
public class Bundle {
public static Bitmap logo { get; set; }
public static Bitmap background { get; set; }
public static Font menuFont { get; set; }
public static Bitmap wall { get; set; }
public static Bitmap floor { get; set; }
public static Bitmap car { get; set; }
public static Bitmap[] oil { get; set; }
public static Bitmap oilpath { get; set; }
public static void init() {
logo = new Bitmap("../../Images/logo.png");
background = new Bitmap("../../Images/background.png");
PrivateFontCollection f = new PrivateFontCollection();
f.AddFontFile("../../Images/Upheaval.otf");
menuFont = new Font(f.Families[0], 24);
}
}
Почему я ловлю исключение именно после вызова DrawString()? Все остальные методы Graphics работают идеально.
Как решить эту проблему? Она очень сильно мешает.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как обработать событие одиночного и двойного нажатия кнопки мыши за границами элемента управления? Все события нажатия кнопки мыши привязаны...
не могу понять как это делатьтоесть обновлять инфу в активном времени
Я бы хоте посоветоваться с вамиСмотрите, такая ситуация, я создал отдельно бд и сгенерил dbmx используя Entity Framework (Database First)