c# socket 服务器端 线程运行后报错

如图说所示:线程间操作无效,我放了一个listbox控件,显示从客户端传来的信息,但是服务器端一监听到客户端传来的东西时,就报错,该问题怎么解决?急急急。。。... 如图说所示:线程间操作无效,我放了一个listbox控件,显示从客户端传来的信息,但是服务器端一监听到客户端传来的东西时,就报错,该问题怎么解决?急急急。。。 展开
 我来答
XyyCare
2011-03-31 · 超过14用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:42万
展开全部
是不是在你的不同的线程中操作了这个Listbox控件?如果是这样的话,在窗体的构造函数中下上一句代码Control.CheckForIllegalCrossThreadCalls = false;即可解决
更多追问追答
追问
我只定义了一个线程
Thread mythread;
try
{
mythread = new Thread(new ThreadStart(BeginLister));//BeginLister()是一个监听方法
mythread.Start();
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message);
lbxserver.Items.Add(ex.Message);
}
追答
因为你的listbox是主线程的控件,你在子线程里面调用主线程的资源,肯定是不被允许的,所以要在窗体的构造函数中调用Control.CheckForIllegalCrossThreadCalls = false
你试试吧。
蝶儿忙
2011-03-31 · TA获得超过1.1万个赞
知道大有可为答主
回答量:2629
采纳率:0%
帮助的人:0
展开全部
线程间操作使用委托。。。

声明一个委托
一个委托用的方法 方法里写的是对listbox的操作

每次在线程里操作listbox时让委托去做
追问
能具体一点吗?怎么委托?给点简单的代码提示也好...谢谢!
追答
追加如下代码 需要更改listbox的时候就调用StartAction
具体参数可自行设置

delegate void MyAction(string text);
void AddMessage(string text)
{
// 此处操作listbox
}
void StartAction(string text)
{
MyAction myAction = AddMessage;
Invoke(myAction, text);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
SleepyRats
2011-03-31 · 超过19用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:42.9万
展开全部
UI主线程只有一个,在其他线程间如果需要操作UI,需要通过委托,Invoke的方式来实现;比如需要在线程间操作listbox可以这样操作:
定义一个public delegate void MsgEventHandler(string msg);
然后需要添加listbox时调用this.Invoke(new MsgEventHandler(_msg), new object[] {ex.Message})
void _msg(string msg)
{
lbxserver.Items.Add(msg);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
irwjmcu
2011-04-01 · TA获得超过277个赞
知道答主
回答量:289
采纳率:0%
帮助的人:0
展开全部
看,你把客户端关闭后,你的发送线程依然开着,没有关,当你再次打开时容易产生错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式