为什么winform面板仅在鼠标hover或鼠标点击时更新?

我创build了一个testing程序,它应该在linux(PCLinuxOS)下反复地改变一个面板的背景颜色,但是它并不能很好地工作。 要么只是当你点击某个东西或者鼠标hover的时候才更新面板的背景颜色,然后停止运行一段时间后程序崩溃。

这里是如何使用2个面板,一个button和一个计时器的winform:

在这里输入图像描述

这是它背后的代码:

namespace TestIndicator; interface uses System.Drawing, System.Collections, System.Collections.Generic, System.Windows.Forms, System.ComponentModel; type /// <summary> /// Summary description for MainForm. /// </summary> MainForm = partial class(System.Windows.Forms.Form) private method d_Click(sender: System.Object; e: System.EventArgs); method timer1_Tick(sender: System.Object; e: System.EventArgs); protected method Dispose(disposing: Boolean); override; public constructor; end; var TurnOnRx, TurnOnTx:Boolean; implementation {$REGION Construction and Disposition} constructor MainForm; begin // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // TurnOnRx := true; TurnOnTx := true; end; method MainForm.Dispose(disposing: Boolean); begin if disposing then begin if assigned(components) then components.Dispose(); // // TODO: Add custom disposition code here // end; inherited Dispose(disposing); end; {$ENDREGION} method MainForm.d_Click(sender: System.Object; e: System.EventArgs); begin timer1.Enabled := not timer1.Enabled; end; method MainForm.timer1_Tick(sender: System.Object; e: System.EventArgs); begin if TurnOnTx then begin TurnOnTx:=false; TxLight.BackColor := Color.Red; end else begin TurnOnTx:=true; TxLight.BackColor := Color.black; end; if TurnOnRx then begin TurnOnRx := false; RxLight.BackColor := Color.Lime; end else begin TurnOnRx := true; RxLight.BackColor := Color.Black; end; end; end. 

也许定时器间隔太短,颜色变化太快?

 namespace TestIndicator; interface uses System.Drawing, System.Collections, System.Collections.Generic, System.Windows.Forms, System.ComponentModel; type /// <summary> /// Summary description for MainForm. /// </summary> MainForm = partial class(System.Windows.Forms.Form) private method d_Click(sender: System.Object; e: System.EventArgs); method timer1_Tick(sender: System.Object; e: System.EventArgs); protected method Dispose(disposing: Boolean); override; public constructor; end; var TurnOnRx, TurnOnTx:Boolean; implementation {$REGION Construction and Disposition} constructor MainForm; begin // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // TurnOnRx := true; TurnOnTx := true; timer1.Inverval := 1000; end; method MainForm.Dispose(disposing: Boolean); begin if disposing then begin if assigned(components) then components.Dispose(); // // TODO: Add custom disposition code here // end; inherited Dispose(disposing); end; {$ENDREGION} method MainForm.d_Click(sender: System.Object; e: System.EventArgs); begin timer1.Enabled := not timer1.Enabled; end; method MainForm.timer1_Tick(sender: System.Object; e: System.EventArgs); begin if TurnOnTx then begin TurnOnTx:=false; TxLight.BackColor := Color.Red; end else begin TurnOnTx:=true; TxLight.BackColor := Color.black; end; if TurnOnRx then begin TurnOnRx := false; RxLight.BackColor := Color.Lime; end else begin TurnOnRx := true; RxLight.BackColor := Color.Black; end; TxLight.Refresh(); RxLight.Refresh(); Application.DoEvents(); end; end.