如何在一个定时器程序里面控制外面的一个线程?

yilaozhuang 2010-12-27 05:45:46
我现在一个主程序FrmMain_Load,一个线程RW_sockets,一个定时器程序timer1_Tick;
主程序FrmMain_Load里面:启动线程RW_sockets,启动定时器程序timer1_Tick;
我想实现:定时器程序timer1_Tick运行后,暂停线程RW_sockets,定时器程序结束了,在重新启动线程RW_sockets,这个应该怎么写?
定时器程序是每隔30s运行一次
下面是我的定时器程序


private Thread thread;
private void FrmMain_Load(object sender, EventArgs e)
{
this.GenerateDefaultPage();

//启动新线程,读取数据
thread=new Thread(RW_sockets);
thread.IsBackground = true;
thread.Start();
//定时读写
timer1.Interval = 30000;//30s
timer1.Enabled = true;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
thread.Suspend();//把线程thread挂起来
Read_sockets("COM4");//定时器的操作
Write_sockets("COM4");//定时器操作
Write_sockets_save_energy("COM4");//线程操作
thread.Resume();//线程再次启动
}
private void RW_sockets()
{
线程里面的程序内容

}


...全文
65 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
地下室小红叔 2010-12-28
  • 打赏
  • 举报
回复
可以通过自定义消息实现 示例如下:

//声明平台调用函数
[DllImport("user32.dll",EntryPoint="SendMessageA")]
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
//发送消息(AppUtil是自定义类名,在需要发送消失的时候引用 比如你的timer1_Tick)
AppUtil.SendMessage(welHandler, (int)MsgParam.WM_DESTROY, 0, 1010);

//接收和响应消息
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == (int)MsgParam.WM_DESTROY)
{
this.Close();
}
base.WndProc(ref m);
}

//说明:MsgParam.WM_DESTROY是对照消息机制的自定义枚举 比如这里是通知系统窗体关闭
//具体的消息机制和函数、参数等请参看相关资料 这里不再缀余
yilaozhuang 2010-12-27
  • 打赏
  • 举报
回复
我的整个操作都是去读写同一个串口com,读写串口的过程中总是报错,我不知道是这个线程的控制不对还是串口的操作部队
sprc_lcl 2010-12-27
  • 打赏
  • 举报
回复
有什么不对吗?就是这么写的吧

110,571

社区成员

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

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

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