问个关于线程的 问题 顶者有分 (2)
public void run()
{
startServer = new Thread(new ThreadStart(startUdpServer));
startServer.Start();
}
private void button7_Click(object sender, EventArgs e)
{
run();
}
startUdpServer函数内容如下:
int i, j;
byte[] receive = new byte[1200];
byte[] realdata = new byte[256];
ASCIIEncoding s = new ASCIIEncoding();
udp.Connect("192.168.7.69", 1969);
IPEndPoint ipadr = new IPEndPoint(IPAddress.Parse("192.168.7.69"), 10001);
receive = udp.Receive(ref ipadr);
if (receive.Length > 119)
{
for (i = 0; i < (int)(receive.Length / 120); i++)
{
st = "";
for (j = 0; j < 29; j++)
{
Array.Resize(ref realdata, 29);
realdata[j] = receive[i * 120 + 0x4d + j];
}
st += s.GetString(realdata);
}
ListViewItem item;
string str = textBox1.Text;
ddd = 1;
if (listView1.Items.Count < 1)// 如果 listview上的记录为空 则添加一个记录;
{
item = new ListViewItem(ddd.ToString());
item.SubItems.Add(st);
item.SubItems.Add("1");
listView1.Items.Add(item);
int aaa = listView1.Items.Count;
}
else
{
for (int m = 0; m < listView1.Items.Count; m++)
{
if (st == Convert.ToString(listView1.Items[m].SubItems[1].Text))
{
//如果 新的内容 str,和 listview上的记录行 相同 则做
ttt = m;
kkk = kkk + 1;
}
else //如果 listview 上 tag 列的内容和 str 不相等
{
kkk = 0;
}
}
if (kkk == 0) //如果没有相同的记录则做如下操作,添加新的一条记录;
{
ddd = ddd + 1;
item = new ListViewItem(ddd.ToString());
item.SubItems.Add(st);
item.SubItems.Add("1");
listView1.Items.Add(item);
}
else //若记录相等 则给listview 上的 times 列 的加“1”;
{
listView1.Items[ttt].SubItems[2].Text = Convert.ToString((Convert.ToInt32(listView1.Items[ttt].SubItems[2].Text) + 1));
}
}
}
}
问题出现在startUdpServer函数 因为listview 这个控件吧
Cross-thread operation not valid: control'listview' accessed from a thead
other than thread it was create on.
还是这个问题 顶的有分 愁死我了
问题点数:100、回复次数:57Top
1 楼wanyeye(助人者天助)回复于 2006-10-27 13:15:31 得分 0
TO LIUJIA
没写错啊 其实显示的有三列内容 ID TAG TIMES
"subItems[2]" 是次数啊, 意思是: 如果读到卡和每一行的卡号比较
比较后确定相同 "subItems[2]" 上就加"1" 次
不同 就另起一行的
item = new ListViewItem(ddd.ToString());
这个也是一列
下面是 初始代码
int ttt;
int kkk;
int ddd;
listView1.View = View.Details;
// Add a column with width 20 and left alignment.
listView1.Columns.Add("ID", 30, HorizontalAlignment.Left);
listView1.Columns.Add("Tag", 120, HorizontalAlignment.Left);
listView1.Columns.Add("Times", 50, HorizontalAlignment.Left);
listView1.Columns.Add("Memo", 50, HorizontalAlignment.Left);
Top
2 楼bjgzxx(食人一族)回复于 2006-10-27 13:17:12 得分 1
顶Top
3 楼bjgzxx(食人一族)回复于 2006-10-27 13:17:45 得分 1
看着有点乱Top
4 楼tjvictor(终于升星了,向两星奋斗)回复于 2006-10-27 13:21:46 得分 1
問題很明顯,應把listview放在線程外面定義Top
5 楼flowersea312()回复于 2006-10-27 13:22:00 得分 1
帮顶了Top
6 楼Knight94(愚翁)回复于 2006-10-27 13:22:50 得分 0
是你的在线程中操作UI部分,这是不允许的,需要用Invoke或者begininvoke来操作。
参看
http://blog.csdn.net/Knight94/archive/2006/08/24/1111267.aspxTop
7 楼Knight94(愚翁)回复于 2006-10-27 13:26:27 得分 3
大致的思路就是定义一个委托,然后在线程中用Invoke去处理
public delegate void SetItemValue( string ItemText );
private void SetItem( string ItemText)
{
yourListView.Items[0].Text = ItemText;
}
//in your thread function
SetItemValue mySet = new SetItemValue( SetItem );
this.Invoke( mySet, new object[]{ "test" } );Top
8 楼ji_vicky(vicky)回复于 2006-10-27 13:43:52 得分 1
太多了,看不完Top
9 楼zlkingdom(风之悲伤)回复于 2006-10-27 13:50:23 得分 1
的确应该是保证线程安全的规则问题Top
10 楼liujia_0421(SnowLover)回复于 2006-10-27 14:20:52 得分 0
大致帮你改了一下,写得有点复杂:
两个委托:
public delegate void MyInvoke1(int id);//用于对相同的项增加次数
public delegate void MyInvoke2(int id,string st);//用于增加新的项
两个函数:
private void CreateNewItem(int id, string st)
{
//添加一个新的项
ListViewItem item = new ListViewItem(id.ToString());
item.SubItems.Add(st);
item.SubItems.Add("1");
listView1.Items.Add(item);
int aaa = listView1.Items.Count;
}
private void UpdateItemTimes(int id)
{
//将出现相同的项次数增1
listView1.Items[id].SubItems[2].Text = Convert.ToString((Convert.ToInt32(listView1.Items[ttt].SubItems[2].Text) + 1));
}
你的代码:
if (receive.Length > 119)
{
for (i = 0; i < (int)(receive.Length / 120); i++)
{
st = "";
for (j = 0; j < 29; j++)
{
Array.Resize(ref realdata, 29);
realdata[j] = receive[i * 120 + 0x4d + j];
}
st += s.GetString(realdata);
}
ListViewItem item;
string str = textBox1.Text;
ddd = 1;
if (listView1.Items.Count < 1)// 如果 listview上的记录为空 则添加一个记录;
{
//改的地方1
//item = new ListViewItem(ddd.ToString());
//item.SubItems.Add(st);
//item.SubItems.Add("1");
//listView1.Items.Add(item);
//int aaa = listView1.Items.Count;
MyInvoke2 mi = new MyInvoke2(CreateNewItem);
this.BeginInvoke(mi, new object[] { ddd, st });
}
else
{
for (int m = 0; m < listView1.Items.Count; m++)
{
if (st == Convert.ToString(listView1.Items[m].SubItems[1].Text))
{
//如果 新的内容 str,和 listview上的记录行 相同 则做
ttt = m;
kkk = kkk + 1;
}
else //如果 listview 上 tag 列的内容和 str 不相等
{
kkk = 0;
}
}
if (kkk == 0) //如果没有相同的记录则做如下操作,添加新的一条记录;
{
ddd = ddd + 1;
//改的地方2
//item = new ListViewItem(ddd.ToString());
//item.SubItems.Add(st);
//item.SubItems.Add("1");
//listView1.Items.Add(item);
MyInvoke2 mi = new MyInvoke2(CreateNewItem);
this.BeginInvoke(mi, new object[] { ddd, st });
}
else //若记录相等 则给listview 上的 times 列 的加“1”;
{
//改的地方3
//listView1.Items[ttt].SubItems[2].Text = Convert.ToString((Convert.ToInt32(listView1.Items[ttt].SubItems[2].Text) + 1));
MyInvoke1 mi = new MyInvoke1(UpdateItemTimes);
this.BeginInvoke(mi, new object[] {ttt});
}
}
}
共有三处改的地方。楼主根据需要可以再自行修改一下,我没有测试,楼主自己试一下吧。
Top
11 楼liujia_0421(SnowLover)回复于 2006-10-27 14:22:34 得分 0
楼主再自己分析一下,对你来说应该不难。Top
12 楼wanyeye(助人者天助)回复于 2006-10-27 14:58:20 得分 0
谢谢各位
这个最后应该在 Microsoft BizTalk2006 里出现地
界面是不用的 我只是想自己测试 DLL 这个RFID中间件是否真确
我去掉listview 看断点 看的结果了 可能还有点问题
请大家多指教 刚接触C# 也是公司临时安排的 没办法 麻烦各位了
Top
13 楼liujia_0421(SnowLover)回复于 2006-10-27 15:13:20 得分 0
单步调试一下,多试几次,如果还有问题再放上来,大家一同讨论一下,共同学习。Top
14 楼Awavese(Awavese)回复于 2006-10-27 15:17:47 得分 1
UPTop
15 楼wanyeye(助人者天助)回复于 2006-10-27 15:28:45 得分 0
TO
liujia_0421()
今天没时间了 换办公室要 搬楼下 呵呵
周一来试试再 基本的协议 都封装差不多了 如果没问题的话 下月去MS 再做进一步开发
再次谢谢各位的帮助
Top
16 楼skywolfma(蓝色愿望沙)回复于 2006-10-27 15:37:45 得分 1
……最常见的线程问题,在UI线程外操作UI线程创建的控件
用委托来做吧Top
17 楼hdhmail2000(禅剑飞雪)回复于 2006-10-27 16:26:25 得分 1
upTop
18 楼GXY2005(民工甲:杀富济贫,打土豪分田地)回复于 2006-10-27 16:35:51 得分 1
听Knight94(愚翁)的没错!Top
19 楼wanyeye(助人者天助)回复于 2006-10-27 16:44:19 得分 0
namespace WindowsApplication1
{
public partial class Form1 : Form
{
int ttt;
int kkk;
int ddd;
ListViewItem item;
Thread startServer;
// int i;
public Form1()
{
InitializeComponent();
listView1.View = View.Details;
// Add a column with width 20 and left alignment.
listView1.Columns.Add("ID", 30, HorizontalAlignment.Left);
listView1.Columns.Add("Tag", 120, HorizontalAlignment.Left);
listView1.Columns.Add("Times", 50, HorizontalAlignment.Left);
listView1.Columns.Add("Memo", 50, HorizontalAlignment.Left);
}
private void button1_Click(object sender, EventArgs e)
{
while (true)
{
run();
}
}
public void run()
{
startServer = new Thread(new ThreadStart(startUdpServer));
startServer.Start();
}
public void startUdpServer()
{
try
{
string st = "aaaa";
ddd = 1;
if (listView1.Items.Count < 1)// 如果 listview上的记录为空 则添加一个记录;
{
item = new ListViewItem(ddd.ToString());
item.SubItems.Add(st);
item.SubItems.Add("1");
listView1.Items.Add(item);
int aaa = listView1.Items.Count;
}
else
{
for (int m = 0; m < listView1.Items.Count; m++)
{
if (st == Convert.ToString(listView1.Items[m].SubItems[1].Text))
{
//如果 新的内容 str,和 listview上的记录行 相同 则做
ttt = m;
kkk = kkk + 1;
}
else //如果 listview 上 tag 列的内容和 str 不相等
{
kkk = 0;
}
}
if (kkk == 0) //如果没有相同的记录则做如下操作,添加新的一条记录;
{
ddd = ddd + 1;
item = new ListViewItem(ddd.ToString());
item.SubItems.Add(st);
item.SubItems.Add("1");
listView1.Items.Add(item);
}
else //若记录相等 则给listview 上的 times 列 的加“1”;
{
listView1.Items[ttt].SubItems[2].Text = Convert.ToString((Convert.ToInt32(listView1.Items[ttt].SubItems[2].Text) + 1));
}
}
// }
}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}
}
}
我把真实的卡号去掉了, ST="aaaa" 用这个做为卡号
那位哥们 喝茶时间帮搞下 不是我懒 实在是摸不到门道
Top
20 楼papper(小齐)回复于 2006-10-27 16:44:51 得分 1
帮LZ顶,
PS:愚翁确实有蛮吊哦!也顺便顶他一下
最后接分,哈哈Top
21 楼gui0605(名花虽有主,锄头更无情,只要锄头舞的好,哪有墙角挖不倒!)回复于 2006-10-27 16:48:01 得分 1
太多了~没看哦。接分Top
22 楼mademelaugh(五朝臣子(以接分为荣,以不结帖为耻))回复于 2006-10-27 16:51:10 得分 1
接分正当时。Top
23 楼liujia_0421(SnowLover)回复于 2006-10-27 16:53:53 得分 0
to: 我把真实的卡号去掉了, ST="aaaa" 用这个做为卡号
没大明白,能否说得再详细点...Top
24 楼purexiafeng(下风)回复于 2006-10-27 16:54:05 得分 1
接分Top
25 楼twozerozerosix(sureSuccess)回复于 2006-10-27 16:55:59 得分 1
http://www.eimhe.com/bbs/adget.php?id=379765
美河学习在线——专业视频课程下载基地
Top
26 楼jimmy_L()回复于 2006-10-27 17:08:11 得分 1
接分Top
27 楼hcl8260(学习的小猪)回复于 2006-10-27 17:10:33 得分 1
ding
Top
28 楼zg_soso()回复于 2006-10-27 17:24:06 得分 1
ding jfTop
29 楼myminimouse(坚决不用baidu)回复于 2006-10-27 17:24:15 得分 1
接分
Top
30 楼free_wang()回复于 2006-10-27 17:36:40 得分 1
upTop
31 楼shaozy()回复于 2006-10-27 17:37:40 得分 1
的确,你应该把listview放到线程外,用一个线程专门完成对控件的修改,别的线程想更改控件的要向这个线程发消息.Top
32 楼CHCXHW(CHC)回复于 2006-10-27 17:44:46 得分 1
照着他们的做把 很简单的 试试就OKTop
33 楼liujia_0421(SnowLover)回复于 2006-10-27 17:50:43 得分 0
to: 我把真实的卡号去掉了, ST="aaaa" 用这个做为卡号
没大明白,能否说得再详细点...Top
34 楼glitdoor()回复于 2006-10-27 17:55:00 得分 1
ddTop
35 楼xjjdanran(何流)回复于 2006-10-27 23:00:28 得分 1
UPTop
36 楼sportlife5200(不会游泳的鲨鱼)回复于 2006-10-27 23:22:24 得分 1
代码真多,没看完,不过给你提个思路
在一个线程中操作另一个线程一般来说是不允许的,可以使用基于事件的异步后台线程来处理数据,在事件中向调用线程(有控件的线程)报告处理结果等各种需要报告的东西,MSDN有详细讲解,可以在本地MSDN中搜索“基于事件的异步模式组件”,它手把手教你如何建立、使用Top
37 楼sportlife5200(不会游泳的鲨鱼)回复于 2006-10-27 23:25:06 得分 1
使用基于事件的异步模式进行多线程编程
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxadvance/html/958d6617-5e70-4b36-b5db-63c16dc35e43.htm
在IE中输入以上网址,就出来了Top
38 楼leeyeefeng2004(leeyeefeng)回复于 2006-10-27 23:29:18 得分 1
1。触发事件
2。只有脱离线程,才能控制你的listview
methodXXXX mk =new methodXXX(委托方法名)
this.invoke(委托方法名)
具体的忘记了,单词不会。。。呵呵Top
39 楼pshy(无心)回复于 2006-10-28 02:57:47 得分 1
頂........Top
40 楼yitian130(※爱计算机胜过爱自己!‰为理想而战)回复于 2006-10-28 05:58:47 得分 1
顶Top
41 楼free_wang()回复于 2006-10-28 11:00:08 得分 1
顶Top
42 楼seemwind(zhamanxia)回复于 2006-10-28 14:24:17 得分 1
那么长,看的好累Top
43 楼xinxin85()回复于 2006-10-28 16:44:23 得分 1
有分么 我顶下Top
44 楼apple_tang()回复于 2006-10-28 18:48:32 得分 1
就是就是,没前没后的,看得累人Top
45 楼free_wang()回复于 2006-10-29 14:19:54 得分 1
upTop
46 楼jhkemail(我在我的梦里梦到你在我的梦里梦到我在你的梦里梦到你在我的梦里梦到我)回复于 2006-10-29 14:22:42 得分 1
这是一个网吧管理系统。
首先在SQL里用getdate()得到当前登陆时间,然后以预存金额与所定义的时段收费(时段收费是在另一张表中,有二十四个字段,从零到二十三,里面记录了每个小时的收费标准)进行减运算,逐一相减,比如20块,现在时间为晚上八点,那么就是20-八点收费标准-九点收费标准以此类推,直到小于或等于1,然后用余数与下一个时段收费标准进行相除,得出所能上网的时长,精确到分,然后与当前登陆时间进行相加,然后得出预计下机时间。
第一个做出来的送分一百,只能在SQL里完成,不能使用其它代码,当然如果有JAVA代码或者C#代码作参考,会补送一些补偿分。请高手帮忙!
顶顺便说一下我的问题,贴子在C#专区。。。。一百分,在线等。。。Top
47 楼wanyeye(助人者天助)回复于 2006-10-30 12:11:52 得分 0
to:liujia
我把真实的卡号去掉了, ST="aaaa" 用这个做为卡号
没大明白,能否说得再详细点...
因为你没真实的设备 读不到卡 ,ST="aaaa" 这个算虚拟的卡号
如过你把代码建立个简单的工程 就可以在listview上看 aaaa 这个虚拟卡号不断增加
不用真实的去连接设备读卡了
Top
48 楼wanyeye(助人者天助)回复于 2006-10-30 13:54:10 得分 0
CheckForIllegalCrossThreadCalls = false;
加这个在构造函数里
private void button7_Click(object sender, EventArgs e)
{
run();
}
run() 这样写能显示 一次
但 这样写
private void button7_Click(object sender, EventArgs e)
{
while
{
run();
}
}
就啥也没有了Top
49 楼liujia_0421(SnowLover)回复于 2006-10-30 13:54:29 得分 0
测试程序如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace TestListView
{
public partial class TestListView : Form
{
private Thread startServer;
public delegate void MyInvoke1(int id);//用于对相同的项增加次数
public delegate void MyInvoke2(int id, string st);//用于增加新的项
int ttt;
int kkk;
int ddd;
string subItemText;
private void CreateNewItem(int id, string st)
{
//添加一个新的项
ListViewItem item = new ListViewItem(id.ToString());
item.SubItems.Add(st);
item.SubItems.Add("1");
listView1.Items.Add(item);
int aaa = listView1.Items.Count;
}
private void UpdateItemTimes(int id)
{
//将出现相同的项次数增1
listView1.Items[id].SubItems[2].Text = Convert.ToString((Convert.ToInt32(listView1.Items[ttt].SubItems[2].Text) + 1));
}
private void GetSubItemText(int index)
{
//得到子项的值
subItemText=Convert.ToString(listView1.Items[index].SubItems[1].Text);
}
public TestListView()
{
InitializeComponent();
ttt=0;
kkk=0;
ddd=1;
}
public void run()
{
startServer = new Thread(new ThreadStart(startUdpServer));
startServer.Start();
}
private void btnTest_Click(object sender, EventArgs e)
{
run();
}
private void startUdpServer()
{
for (int iii = 0; iii < 10; iii++)
{
//ListViewItem item;
//string str = textBox1.Text;
string st = "aaaa";
//ddd = 1;
if (listView1.Items.Count < 1)// 如果 listview上的记录为空 则添加一个记录;
{
//改的地方1
//item = new ListViewItem(ddd.ToString());
//item.SubItems.Add(st);
//item.SubItems.Add("1");
//listView1.Items.Add(item);
//int aaa = listView1.Items.Count;
MyInvoke2 mi = new MyInvoke2(CreateNewItem);
this.BeginInvoke(mi, new object[] { ddd, st });
}
else
{
for (int m = 0; m < listView1.Items.Count; m++)
{
MyInvoke1 mi = new MyInvoke1(GetSubItemText);
//string str = Convert.ToString ( );
this.BeginInvoke(mi, new object[] { m });
if (st == subItemText )
{
//如果 新的内容 str,和 listview上的记录行 相同 则做
ttt = m;
kkk = kkk + 1;
}
else //如果 listview 上 tag 列的内容和 str 不相等
{
kkk = 0;
}
}
if (kkk == 0) //如果没有相同的记录则做如下操作,添加新的一条记录;
{
ddd = ddd + 1;
//改的地方2
//item = new ListViewItem(ddd.ToString());
//item.SubItems.Add(st);
//item.SubItems.Add("1");
//listView1.Items.Add(item);
MyInvoke2 mi = new MyInvoke2(CreateNewItem);
this.BeginInvoke(mi, new object[] { ddd, st });
}
else //若记录相等 则给listview 上的 times 列 的加“1”;
{
//改的地方3
//listView1.Items[ttt].SubItems[2].Text = Convert.ToString((Convert.ToInt32(listView1.Items[ttt].SubItems[2].Text) + 1));
MyInvoke1 mi = new MyInvoke1(UpdateItemTimes);
this.BeginInvoke(mi, new object[] { ttt });
}
}
}
}
}
}
输出为:
ID Tag Times Memo
1 aaaa 10
Top
50 楼liujia_0421(SnowLover)回复于 2006-10-30 13:59:46 得分 0
稍微修改一下:
将string st = "aaaa";修改为:
string st = "aaaa"+iii.ToString ();
即:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace TestListView
{
public partial class TestListView : Form
{
private Thread startServer;
public delegate void MyInvoke1(int id);//用于对相同的项增加次数
public delegate void MyInvoke2(int id, string st);//用于增加新的项
int ttt;
int kkk;
int ddd;
string subItemText;
private void CreateNewItem(int id, string st)
{
//添加一个新的项
ListViewItem item = new ListViewItem(id.ToString());
item.SubItems.Add(st);
item.SubItems.Add("1");
listView1.Items.Add(item);
int aaa = listView1.Items.Count;
}
private void UpdateItemTimes(int id)
{
//将出现相同的项次数增1
listView1.Items[id].SubItems[2].Text = Convert.ToString((Convert.ToInt32(listView1.Items[ttt].SubItems[2].Text) + 1));
}
private void GetSubItemText(int index)
{
//得到子项的值
subItemText=Convert.ToString(listView1.Items[index].SubItems[1].Text);
}
public TestListView()
{
InitializeComponent();
ttt=0;
kkk=0;
ddd=1;
}
public void run()
{
startServer = new Thread(new ThreadStart(startUdpServer));
startServer.Start();
}
private void btnTest_Click(object sender, EventArgs e)
{
run();
}
private void startUdpServer()
{
for (int iii = 0; iii < 10; iii++)
{
//ListViewItem item;
//string str = textBox1.Text;
string st = "aaaa"+iii.ToString ();
//ddd = 1;
if (listView1.Items.Count < 1)// 如果 listview上的记录为空 则添加一个记录;
{
//改的地方1
//item = new ListViewItem(ddd.ToString());
//item.SubItems.Add(st);
//item.SubItems.Add("1");
//listView1.Items.Add(item);
//int aaa = listView1.Items.Count;
MyInvoke2 mi = new MyInvoke2(CreateNewItem);
this.BeginInvoke(mi, new object[] { ddd, st });
}
else
{
for (int m = 0; m < listView1.Items.Count; m++)
{
MyInvoke1 mi = new MyInvoke1(GetSubItemText);
//string str = Convert.ToString ( );
this.BeginInvoke(mi, new object[] { m });
if (st == subItemText )
{
//如果 新的内容 str,和 listview上的记录行 相同 则做
ttt = m;
kkk = kkk + 1;
}
else //如果 listview 上 tag 列的内容和 str 不相等
{
kkk = 0;
}
}
if (kkk == 0) //如果没有相同的记录则做如下操作,添加新的一条记录;
{
ddd = ddd + 1;
//改的地方2
//item = new ListViewItem(ddd.ToString());
//item.SubItems.Add(st);
//item.SubItems.Add("1");
//listView1.Items.Add(item);
MyInvoke2 mi = new MyInvoke2(CreateNewItem);
this.BeginInvoke(mi, new object[] { ddd, st });
}
else //若记录相等 则给listview 上的 times 列 的加“1”;
{
//改的地方3
//listView1.Items[ttt].SubItems[2].Text = Convert.ToString((Convert.ToInt32(listView1.Items[ttt].SubItems[2].Text) + 1));
MyInvoke1 mi = new MyInvoke1(UpdateItemTimes);
this.BeginInvoke(mi, new object[] { ttt });
}
}
}
}
}
}
输出如下:
ID Tag Times Memo
1 aaaa0 1
2 aaaa1 1
3 aaaa2 1
4 aaaa3 1
5 aaaa4 1
6 aaaa5 1
7 aaaa6 1
8 aaaa7 1
9 aaaa8 1
10 aaaa9 1Top
51 楼liujia_0421(SnowLover)回复于 2006-10-30 14:00:55 得分 0
不知是否是楼主说的意思....Top
52 楼wanyeye(助人者天助)回复于 2006-10-30 14:20:02 得分 0
输出为:
ID Tag Times Memo
1 aaaa 10
我要的是这种 谢谢你兄弟
留个MSN 吧 我觉得以后这个BizTalk2006 这个RFID中间件
开发中还会有不少问题,希望能多指教Top
53 楼wanyeye(助人者天助)回复于 2006-10-30 14:47:46 得分 0
TO LIUJIA
输出为:
ID Tag Times Memo
1 aaaa 10
你的输出为这个结果的 代码中 startUdpServer()在这个函数里用了 10次的循环啊
输出的效果是对的,但方法不是想要的
我想的是把下面的BUTTON里代码
private void btnTest_Click(object sender, EventArgs e)
{
run();
}
改为
private void btnTest_Click(object sender, EventArgs e)
{
while(ture)
{
run();
}
}
让这个startUdpServer()的线程一直运行 能成么?
我改了 但程序死了Top
54 楼liujia_0421(SnowLover)回复于 2006-10-30 15:15:14 得分 62
private void btnTest_Click(object sender, EventArgs e)
{
while(ture)
{
run();
}
}
让这个startUdpServer()的线程一直运行 能成么?
这是死循环,程序当然会死掉啊....Top
55 楼wanyeye(助人者天助)回复于 2006-10-30 16:06:27 得分 0
噢 了解
那和MCU程序不一样啊
while(ture)
{
run();
}
就是这样个大循环的啊 程序一直工作
那C# 有什么办法让这个线程 一直工作 或 间隔100ms工作一次?Top
56 楼awen177(abiao)回复于 2006-10-30 16:44:11 得分 0
设置个timer试试Top
57 楼wanyeye(助人者天助)回复于 2006-10-30 16:51:26 得分 0
谢谢你 AWEN
TIMER 的我试过了是可以的 呵呵 可以定时刷新的
同时也不存在 这个问题 就是交叉线程
按MS专家的意思 一定要用线程
不行去北京再说了Top

