关于GUI的Listbox和TextBox在定时状态都不能及时更新内容的疑问

XUYH3307 2011-10-21 01:26:02
我刚开始学习C#,现在碰到了如标题所示的问题。
具体描述如下:
我用定时器1S触发串口数据发送和接收,然后希望收发的状态实时显示在ListBox和TextBox中(ListBox和TextBox是显示内容是一样的)。结果每次都是等我结束串口发送时才把收发的状态显示出来。
然后我又用按钮触发的方式来实现,这时收发的状态就能马上在ListBox和TextBox中显示出来了。

我的疑问是:为什么在Timer状态下不能够马上显示出来呢?
...全文
56 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdl2005lyx 2011-10-21
  • 打赏
  • 举报
回复
因为定时器设计线程问题,需要用用委托才能显示接受的信息:

给你一段我使用过的代码:

public delegate void ParseData(ref byte[] data);
public ParseData MyDelegate;

MyDelegate = new ParseData(ShowUI);
public void ShowUI(ref byte[] recData)
{
......//在这里加入界面处理代码
}

Thread thread = new Thread(new ThreadStart(MyReceive));//启动接收线程
private void MyReceive()
{
while (!bControl)
{
int num = myClient.Receive(receBytes);
if (num > 0 )
{
this.Invoke(MyDelegate, receBytes); //这里使用委托,处理界面显示!
}
Array.Clear(receBytes, 0, 256);
}

}


XUYH3307 2011-10-21
  • 打赏
  • 举报
回复
恩,我试过了,应该是进入到循环里面然后条件不满足出不来,导致GUI不能及时更新。
谢谢你的帮助!
yalan 2011-10-21
  • 打赏
  • 举报
回复
不知道你的计时器逻辑是怎么写的
如果你的按钮触发事件正常,你这样尝试修改你的代码

private void button_GetData_Click(.....)
{
//按钮触发的代码不要动
}

private void timer_Tick(.....)
{
//注释原来的代码,计时器的tick事件中只写一行调用按钮事件的代码试试
button_GetData_Click(null,null);
}


如果能正常显示数据,那就应该是你的代码写的有问题

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧