我目前正在开发Windows Mobile 6.5应用程序。该应用程序具有蓝牙功能,可从串行端口读取数据。一旦读取了数据,事件处理程序就会将数据从较低级别的类传递到UI视图。 UI将更新值并根据从串行端口读取的值更改按钮的背景颜色。但是,有时,蓝牙设备可能超出范围。换句话说,手持设备不能从远程蓝牙设备接收任何数据。
当设备在范围内且手持设备可以从串口接收数据时,接收的值和按钮的背景颜色将根据接收的值相应地在UI中改变。但是,在超出范围后设备再次进入范围后,事件处理程序由于某种原因不起作用,因此,只有值更改,按钮的背景颜色不能通过事件处理程序更改。
如果我点击该按钮,颜色将再次改变。看起来只有焦点在按钮上才会改变颜色。我可以确认与事件处理程序有关的问题,因为我在标签上打印了deviceName,事件处理程序不会触发。谁能知道它为什么会发生?或任何更好的想法接近。
这是我用来保持监听按钮及其事件处理程序的背景颜色变化的代码:
Button[] gauges = new Button[MonitoringGauges.Count()]; // declare the button variable
// Create a button for each gauge
.....
.....
.....
// Constructor
for(int k = MonitoringGauges.count -1 ; k >=0 ; k--){ // keep listening to the backcolor change for the button corresponding to the gauge
if(MonitoringGauges[k] !=null){
MonitoringGauges[k].TrainingZoneChanged += new Gauge.TrainingZoneChangedEventHandler(x_TrainingZoneChanged);
}
}
// event handler
void x_TrainingZoneChanged(string deviceName, string macAddress, Color color){
if(!string.IsNullOrEmpty(deviceName) && !string.IsNullOrEmpty(macAddress) && color !=null){
Button btn = gauges.Where(x =>x.Name.equals(deviceName)).First(); // find the correct button for updating the backcolor of the button
if(btn !=null){
btn.Invoke((Action) delegate
{
if(color == Color.Black){
btn.BackColor = Color.LightBlue;
} else{
btn.BackColor = color;
}
});
}
}
}
感谢您的帮助。
此致
SW Lau
答案 0 :(得分:0)
你有没有尝试过简单的btn.Refresh()来强制重绘?可能后跟Application.DoEvents();