| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5655 人关注过本帖
标题:[求助] serialPort的"DataReceived" 事件里为何不能访问窗体上的控件! ...
只看楼主 加入收藏
cqlmp
Rank: 1
等 级:新手上路
帖 子:127
专家分:0
注 册:2007-1-29
收藏
 问题点数:0 回复次数:15 
[求助] serialPort的"DataReceived" 事件里为何不能访问窗体上的控件!

在VS2005的窗体上有一个"serialPort控件",为什么不能在DataReceived" 事件里访问窗体上的控件? 出现如下错误:

图片附件: 游客没有浏览图片的权限,请 登录注册


有知道的朋友请告知,先谢谢了!

[此贴子已经被作者于2007-3-18 21:45:39编辑过]

搜索更多相关主题的帖子: 控件 DataReceived serialPort 窗体 
2007-03-18 21:24
chenjin145
Rank: 1
等 级:禁止访问
帖 子:3922
专家分:0
注 册:2006-7-12
收藏
得分:0 
那个是异步的

得invoke

[url=javascript:alert(1);] [div]fdgfdgfdg\" on\"[/div] [/url]
2007-03-19 09:26
cqlmp
Rank: 1
等 级:新手上路
帖 子:127
专家分:0
注 册:2007-1-29
收藏
得分:0 

谢谢二楼的朋友!

我在"DataReceived"事件里有些代码,比如:
......
string cardnum;
cardnum=textCardnum.text;
......

那现在又该如何写呢? 烦请告知!

2007-03-19 10:33
chenjin145
Rank: 1
等 级:禁止访问
帖 子:3922
专家分:0
注 册:2006-7-12
收藏
得分:0 

省得麻烦 ,你直接把整个event回调算了

public delegate void DataReceivedDelegate(object sender,eventargs e);
public DataReceivedDelegate myDelegate;
public void DataReceived(object sender,eventargs e) 这是你那个事件
{
Invoke(myDelegate,new object[]{sender,e});
}

public void CallDataReceived(object sender,eventargs e)
{
把执行代码放这里

}


[url=javascript:alert(1);] [div]fdgfdgfdg\" on\"[/div] [/url]
2007-03-19 11:17
cqlmp
Rank: 1
等 级:新手上路
帖 子:127
专家分:0
注 册:2007-1-29
收藏
得分:0 
好的,多谢4楼,可是要晚上回家才能测试!

[此贴子已经被作者于2007-3-19 11:45:39编辑过]


2007-03-19 11:33
cqlmp
Rank: 1
等 级:新手上路
帖 子:127
专家分:0
注 册:2007-1-29
收藏
得分:0 

我按4楼的说法做,怎么会出现以下错误呢:

找不到类型或命名空间名称“eventargs”(是否缺少 using 指令或程序集引用?)

请指教啊,多谢了!

2007-03-20 14:27
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
Eventargs

飘过~~
2007-03-20 14:40
cqlmp
Rank: 1
等 级:新手上路
帖 子:127
专家分:0
注 册:2007-1-29
收藏
得分:0 

刚上面那个问题解决了,不是eventargs,而是EventArgs
但改个以后程序还是不行,这里我提出两个疑问:
1.串口的标准事件程序是这样的
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
......
}
2.4楼说的:
public void CallDataReceived(object sender,eventargs e)
{
把执行代码放这里
}
那CallDataReceived是什么意思啊,是不是调用串口接收事件那程序啊?

请指教哟,多谢谢了!

2007-03-20 14:48
chenjin145
Rank: 1
等 级:禁止访问
帖 子:3922
专家分:0
注 册:2006-7-12
收藏
得分:0 

没工具 原来写错了

应该这样

public delegate void DataReceivedDelegate(object sender,eventargs e);
public void serialPort1_DataReceived(object sender,eventargs e) 这是你那个事件
{
Invoke(new DataReceivedDelegate(CallDataReceived),new object[]{sender,e});
}

public void CallDataReceived(object sender,eventargs e)
{
把执行代码放这里

}


[url=javascript:alert(1);] [div]fdgfdgfdg\" on\"[/div] [/url]
2007-03-20 15:32
cqlmp
Rank: 1
等 级:新手上路
帖 子:127
专家分:0
注 册:2007-1-29
收藏
得分:0 

哈哈,"chenjin145"是正解,多些你的热心!
但又出现了下面的问题:

我在下面程序里加上了我自己的代码:
public void CallDataReceived(object sender,eventargs e)
{
// 把执行代码放这里
//从串口取出数据:
this.textCardnum.text=串口取出数据;
}

然后发现该窗体上的textCardnum控件只接收到串口的后几位数据388~,而正常情况下应该接收~0200500388~,我仔细观察才发现,textCardnum是在该事件中赋了两次值:第一次是~0200500,第二次是388~,所以textCardnum控件显示的是388~,如此便不能读出正常的数据;不知道是我串口设置错了,还是从串口去数据时候的代码有错,请知道的朋友告诉我了!先谢谢了

2007-03-21 08:48
快速回复:[求助] serialPort的"DataReceived" 事件里为何不能访问窗体上的控件! ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031029 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved