C#编程中使用UDP通讯协议,多线程问题

mesage 2013-10-14 08:44:23
我在主窗体中已经实现了多线程,但是在其他窗体中使用相同的方法却不行。请问,在其他窗体中需要怎样修改才能实现多线程?
在主窗体中是这样编程的:
Thread thread1 = new Thread(new ThreadStart(ChangeParameter));
thread1.Start();
请问在其他窗体上怎样实现多线程?
...全文
433 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mesage 2013-10-18
  • 打赏
  • 举报
回复
谁帮帮忙呀!
mesage 2013-10-18
  • 打赏
  • 举报
回复
引用 10 楼 wangjun1253 的回复:
你的问题没有描述清楚啊,在其他窗体这样编不行,上面一大推代码哪段代码没反应?还是说你没有贴出来?
这一段代码在主窗体上是可行的,在其他窗体运行就在 Thread thread1 = new Thread(new ThreadStart(ChangeParameter)); 这直接跳出窗体了。 不知道是为什么呀!
wangjun1253 2013-10-16
  • 打赏
  • 举报
回复
你的问题没有描述清楚啊,在其他窗体这样编不行,上面一大推代码哪段代码没反应?还是说你没有贴出来?
mesage 2013-10-16
  • 打赏
  • 举报
回复
哪位好心人帮帮忙呀!
mesage 2013-10-15
  • 打赏
  • 举报
回复
#region 发送修改增益及蜂鸣器命令 private delegate void displayButtonDelegate(); public void ChangeParameter() { if (udp == null) { ShowMsgInThread("请先开始UDP检测!"); return; } if(currentDevice==null) { ShowMsgInThread("请先选择一个设备!"); return; } IPEndPoint readerip = new IPEndPoint(IPAddress.Parse(currentDevice.DeviceIP),currentDevice.PortNo); string i,j, k; byte[] datas = new byte[3]; if (this.cmbTransGain.InvokeRequired) { displayButtonDelegate d = null; d = delegate() { i = cmbTransGain.Text; datas[0] = StringHelper.ConvertHexToByte(StringHelper.ConvertIntToHex(Convert.ToInt32(i))); }; Control f = this.cmbTransGain.Parent; if (f != null) { f.Invoke(d); } } else { i = cmbTransGain.Text; datas[0] = StringHelper.ConvertHexToByte(StringHelper.ConvertIntToHex(Convert.ToInt32(i))); } if (this.cmbReceiveGain.InvokeRequired) { displayButtonDelegate d = null; d = delegate() { j = cmbReceiveGain.Text; datas[1] = StringHelper.ConvertHexToByte(StringHelper.ConvertIntToHex(Convert.ToInt32(j))); }; Control f = this.cmbReceiveGain.Parent; if (f != null) { f.Invoke(d); } } else { j = cmbReceiveGain.Text; datas[1] = StringHelper.ConvertHexToByte(StringHelper.ConvertIntToHex(Convert.ToInt32(j))); } #region 蜂鸣开关 if (this.cmbBuzzerSwitch.InvokeRequired) { displayButtonDelegate d = null; d = delegate() { if (cmbBuzzerSwitch.Text == "蜂鸣开") { k = "1"; datas[2] = StringHelper.ConvertHexToByte(StringHelper.ConvertIntToHex(Convert.ToInt32(k))); } else { k = "0"; datas[2] = StringHelper.ConvertHexToByte(StringHelper.ConvertIntToHex(Convert.ToInt32(k))); } }; Control f = this.cmbBuzzerSwitch.Parent; if (f != null) { f.Invoke(d); } } else { if (cmbBuzzerSwitch.Text == "蜂鸣开") { k = "1"; datas[2] = StringHelper.ConvertHexToByte(StringHelper.ConvertIntToHex(Convert.ToInt32(k))); } else { k = "0"; datas[2] = StringHelper.ConvertHexToByte(StringHelper.ConvertIntToHex(Convert.ToInt32(k))); } } #endregion //string类型专int专Hex专Byte ClassByte fasong = new ClassByte("88", 69, datas); udp.Send(fasong.Bytes, fasong.Bytes.Length, readerip); //接收回复 IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 32100); Byte[] receiveBytes; receiveBytes = udp.Receive(ref RemoteIpEndPoint); ClassRBytes rb = new ClassRBytes(udp.Receive(ref RemoteIpEndPoint)); string data = System.Text.Encoding.ASCII.GetString(rb.Data); if (lbState.InvokeRequired) { displayButtonDelegate d = null; d = delegate() { lbState.Text = "设置参数OK/FALSE:" + (data); }; Control f = this.lbState.Parent; if (f != null) { f.Invoke(d); } else { lbState.Text = "设置参数OK/FALSE:" + (data); } } } #endregion #region 设备端设置--设置参数按钮 private void btnChangeParameter_Click(object sender, EventArgs e) { Thread thread1 = new Thread(new ThreadStart(ChangeParameter)); thread1.Start(); } #endregion 我在主窗体上这样写是可以的,虽然编的破到不行。可是到其他窗体上这样编就没反应。求指错,求修改呀! 哪位大神能帮帮我!截止日期要到了,还差好多!
mesage 2013-10-15
  • 打赏
  • 举报
回复
[quote=引用 5 楼 jiaoshiyao 的回复:] 你的这个问题太那个啥了吧 你要问的具体点 啊[/quote我是不会在其他窗体实现多线程呀!我编软件对设备下命令。主窗体上能读能改参数。可到了其他窗体上,多线程就不好用了。请问改怎么编程呀?
QuickPai 2013-10-15
  • 打赏
  • 举报
回复
不明觉厉
jiaoshiyao 2013-10-15
  • 打赏
  • 举报
回复
你的这个问题太那个啥了吧 你要问的具体点 啊
mesage 2013-10-15
  • 打赏
  • 举报
回复
引用 2 楼 happytonice 的回复:
但是在其他窗体中使用相同的方法却不行 ====================== 怎样个不行法?
我实现不了多线程。在主窗体中我在读取数据的同时可以修改参数,在由主窗体跳出的其他窗体中,想要实现修改参数的功能却不可以。我自己认为是多线程没有编写好。
mesage 2013-10-15
  • 打赏
  • 举报
回复
引用 1 楼 sj178220709 的回复:
udp和多线程从技术角度来看,一点关系都没有,最烦这样问问题的,连自己要问的是什么都不知道。 进来一看,果然。。。
我用UDP编写的多线程不可以吗?您会吗?会的话帮下忙,不会请您理解下菜鸟的心情。
happytonice 2013-10-14
  • 打赏
  • 举报
回复
但是在其他窗体中使用相同的方法却不行 ====================== 怎样个不行法?
  • 打赏
  • 举报
回复
udp和多线程从技术角度来看,一点关系都没有,最烦这样问问题的,连自己要问的是什么都不知道。 进来一看,果然。。。

110,503

社区成员

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

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

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