我正致力於使我的應用程序從串行端口讀取數據並更新UI上的標尺更高效,並且我想要詢問有關處理UI更改的代碼的一些建議。我有一個計時器設置爲檢查發送到COM端口的數據,另一個計時器使用從COM端口收到的變量更新UI。基本上發生了什麼是我旋轉儀表。這裏是我處理圖形的代碼...使用定時器更新C#中的用戶界面
void timer_Tick(object sender, EventArgs e) //Timer regulates how often the gauge is updated on the UI
{
if (pictureBox1.Image != null)
pictureBox1.Image.Dispose(); // dispose old image (you might consider reusing it rather than making a new one each frame)
Point test = new Point((int)_xCor, (int)_yCor);
Image img = new Bitmap(400, 400); // The box tht contains the image <--- Play around with this more
pictureBox1.Image = img; // Setting the img Image to the pictureBox class?
Graphics g = Graphics.FromImage(pictureBox1.Image); // G represents a drawing surface
Matrix mm1 = new Matrix();
//
mm1.RotateAt((float)(90 + (((12.5 * state) - 20.95) * 6)), new Point((int)_xrotate, (int)_yrotate), MatrixOrder.Append);
GraphicsPath gp = new GraphicsPath();
g.Transform = mm1; // transform the graphics object so the image is rotated
g.DrawImage(imgpic, test); // if the image needs to be behind the path, draw it beforehand
mm1.Dispose();// prevent possible memory leaks
gp.Dispose();// prevent possible memory leaks
g.Dispose(); // prevent possible memory leaks
pictureBox1.Refresh();
}
我想知道是否有更有效的方法,我可以在屏幕上旋轉圖像。我覺得必須有,但我無法弄清楚。
你能具體談談您希望它是 「更有效」?例如,你覺得定時器回調在沒有必要時被調用(自上次回調以來沒有改變),方法是否太慢,使用的內存太多?你看到一些可衡量的性能問題嗎? – dgvid
這更多的是性能問題,當我嘗試在我的筆記本電腦上運行應用程序時,響應非常緩慢。例如,對傳感器的響應應該在1-3秒後出現。 – Bubo
標題是關於使用計時器更新UI的問題,但您實際上擔心圖形效率?你有很多無關的細節,只是渾水。 –