问题有点怪,请看下面程序:
private void DeviceConnect()
{
//getVoltage(id);//读电压
tmrRead.Enabled = true;//启动timer,并激活timer tick中的程序
Thread.Sleep(100);
for (int cycInt = 1; cycInt <= 3; cycInt++)
{
createChart(cycInt,m_nums);//创建chart并显示电压值
}
} private void tmrRead_Tick(object sender, EventArgs e)// do the time cycle to get voltage and show Voltage in Chart
{
countCycle++;
//通过rich text box显示取到的电压值,监察是否取到
rtbWarning.Text = countCycle.ToString()+ " V7 voltage is: " + retrived.V7.ToString();
if (getVoltage(id))//读电压
{
showChart(BAT_num, m_numCells);//用timer来一遍遍循环不停地读电压并显示在创建的chart中
}
else
{
rtbWarning.Text = "can't read message from UBM";
}
}以上程序中,我想通过timer tick循环读电压,timer tick读完的电压在rich text box中能显示,但chart创建时取同样的值到得却是空值。
但我如果将timer.enable=true;注释掉,将getVoltage(id);放在DeviceConnect中运行,createChart显示的图表就能取到值。
电压值是放在一个全局变量中。
为什么timer tick 读的值,在deviceconnect中读不到?
private void DeviceConnect()
{
//getVoltage(id);//读电压
tmrRead.Enabled = true;//启动timer,并激活timer tick中的程序
Thread.Sleep(100);
for (int cycInt = 1; cycInt <= 3; cycInt++)
{
createChart(cycInt,m_nums);//创建chart并显示电压值
}
} private void tmrRead_Tick(object sender, EventArgs e)// do the time cycle to get voltage and show Voltage in Chart
{
countCycle++;
//通过rich text box显示取到的电压值,监察是否取到
rtbWarning.Text = countCycle.ToString()+ " V7 voltage is: " + retrived.V7.ToString();
if (getVoltage(id))//读电压
{
showChart(BAT_num, m_numCells);//用timer来一遍遍循环不停地读电压并显示在创建的chart中
}
else
{
rtbWarning.Text = "can't read message from UBM";
}
}以上程序中,我想通过timer tick循环读电压,timer tick读完的电压在rich text box中能显示,但chart创建时取同样的值到得却是空值。
但我如果将timer.enable=true;注释掉,将getVoltage(id);放在DeviceConnect中运行,createChart显示的图表就能取到值。
电压值是放在一个全局变量中。
为什么timer tick 读的值,在deviceconnect中读不到?
解决方案 »
- 菜鸟请教前辈帮解决一个变量访问级别的问题,先感谢前辈了!
- 关于MDI窗体刷新子窗体问题
- 关于做动态相册的问题。
- 如何在testbox中按下小键盘的加号键 但不将字符'+'写入 ?请指教 谢谢
- 平均值滤波法
- 如何在c#中打开电脑的串口并读取串口中的数据呢?谢谢各位
- DataGrid输入焦点问题!
- 怎样拦截IE弹出菜单?
- 请问,,怎么样使DataGrid中的CheckBox控件只有两种状态(选取和未选取,不要变灰的那种状态)!!
- 问个Socket问题,在同一机子上打开2个客户端就出错,帮忙看下这段代码:
- C#控制台程序,在做do while 循环的过程中,内存慢慢增加,直到do while结束,内存才释放,这个正常吗
- 系统服务可以放在任务栏上吗?
public partial class btGetUBMData : Form
{
private void Main_Load(object sender, EventArgs e)
{
....
deviceConnect();
....
}
private void deviceConnect()
{
....
tmrRead.Enabled = true;
createChart(cycInt,m_nums);//创建chart并显示电压值....
}
private void tmrRead_Tick(object sender, EventArgs e)
{
....
getVoltage(UBMid))
....
}
}
问:应该怎样添加postmessage语句?
用Invoke可以解决,
试一试下面的
private delegate void DelegNull();
private void tmrRead_Tick(object sender, EventArgs e)// do the time cycle to get voltage and show Voltage in Chart
{
this.Invoke((DelegNull)delegate
{
countCycle++;
//通过rich text box显示取到的电压值,监察是否取到
rtbWarning.Text = countCycle.ToString()+ " V7 voltage is: " + retrived.V7.ToString();
if (getVoltage(id))//读电压
{
showChart(BAT_num, m_numCells);//用timer来一遍遍循环不停地读电压并显示在创建的chart中
}
else
{
rtbWarning.Text = "can't read message from UBM";
}
});
}
{
....
Thread myThread = new Thread(new ThreadStart(DoCycle));
myThread.Start();
....
}
private void btGetData_FormClosing(object sender, FormClosingEventArgs e)
{
myThread.abort();
This.Closing }
关闭后,在TaskManager仍然可以看到程序在运行,问:怎样可以在关闭程序时完全退出。