@Sushkov
">alert("yohoho")

Как оптимизировать отрисовку в pictureBox?

Через СOM порт с датчика считываю данные данные каждые 200мс:
time = DateTime.Now;//считывание времени 
var culture = new CultureInfo("ru-RU");//установка формата времени согласно региону 
TimeStr = time.ToString(culture);//перевод времени в строку 
temp = serialPort1.ReadLine(); 
textBox4.Text = temp; 
sx = serialPort1.ReadLine();//считывание показаний с датчика(X 
sy = serialPort1.ReadLine();//считывание показаний с датчика(Y 
sz = serialPort1.ReadLine();//считывание показаний с датчика(Z 
sx = sx.Replace('.', ',').Replace('\r', ' ');//перевод показаний(X 
sy = sy.Replace('.', ',').Replace('\r', ' ');//перевод показаний(Y 
sz = sz.Replace('.', ',').Replace('\r', ' ');//перевод показаний(Z 
temp = temp.Replace('.', ',').Replace('\r', ' ');//перевод показаний(Z 
x = Math.Round(Convert.ToDouble(sx), 1);//округление показаний до 1 знака после запятой(X 
y = Math.Round(Convert.ToDouble(sy), 1);//округление показаний до 1 знака после запятой(Y 
z = Math.Round(Convert.ToDouble(sz), 1);//округление показаний до 1 знака после запятой(Z 
t = Math.Round(Convert.ToDouble(temp), 1); 
cx = Math.Round(x0 - x, 1);//создание переменных с колибровкой(X 
cy = Math.Round(y0 - y, 1);//создание переменных с колибровкой(Y 
cz = Math.Round(z0 - z, 1);//создание переменных с колибровкой(Z 
textBox1.Text = cx.ToString();//вывод показаний на форму(X 
textBox2.Text = cy.ToString();//вывод показаний на форму(Y 
textBox3.Text = cz.ToString();//вывод показаний на форму(Z 
dravaxel(pictureBox1, cx, label_X, job);//вызов функции отрисовки осей в круге(X 
dravaxel(pictureBox2, cy, label_Y, job);//вызов функции отрисовки осей в круге(Y 
dravaxel(pictureBox3, cz, label_Z, job);//вызов функции отрисовки осей в круге(Z

и после методом dravaxel отрисовываю в pictureBox, но программа начинает фризить очень сильно
static void dravaxel(PictureBox picbx, double angl, Label lbl, bool j) 
{ 
Bitmap btmBack = new Bitmap(200, 200);//создание поля для отрисовки 
Graphics g = Graphics.FromImage(btmBack);//привязка поля к графической переменной 
Pen pen = new Pen(Brushes.Black, 1);//описание пера 
g.DrawEllipse(pen, 10, 10, 179, 179);//отрисовка круга 
g.DrawLine(pen, 0, 100, 200, 100);//открисовка оси 
g.DrawLine(pen, 100, 0, 100, 200);//открисовка оси 
double andl_ = (Math.PI / 180) * (angl - 90);//вычисление угла в радианах 
int X = 100 + (int)Math.Round(Math.Cos(andl_) * 100);//Вычисление координат 
int Y = 100 + (int)Math.Round(Math.Sin(andl_) * 100); 
pen = new Pen(Brushes.Red, 3); 
g.DrawLine(pen, X, Y, 100, 100);//отрисовка вектора 
X = (int)Math.Round(Math.Cos(andl_) * 110);//Вычисление координат 
Y = (int)Math.Round(Math.Sin(andl_) * 110); 
lbl.Top = picbx.Top + Y + 100;//расчитываем координаты для лейблов 
lbl.Left = picbx.Left + X + 100; 
if (j) 
lbl.Text = angl.ToString();//вывод угла в лейблах 
picbx.Image = btmBack;//вывод картинки на поле 
}

Из за чего это может быть?
  • Вопрос задан
  • 382 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы