c# socket 服务器端 线程运行后报错
如图说所示:线程间操作无效,我放了一个listbox控件,显示从客户端传来的信息,但是服务器端一监听到客户端传来的东西时,就报错,该问题怎么解决?急急急。。。...
如图说所示:线程间操作无效,我放了一个listbox控件,显示从客户端传来的信息,但是服务器端一监听到客户端传来的东西时,就报错,该问题怎么解决?急急急。。。
展开
展开全部
是不是在你的不同的线程中操作了这个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
你试试吧。
展开全部
线程间操作使用委托。。。
声明一个委托
一个委托用的方法 方法里写的是对listbox的操作
每次在线程里操作listbox时让委托去做
声明一个委托
一个委托用的方法 方法里写的是对listbox的操作
每次在线程里操作listbox时让委托去做
追问
能具体一点吗?怎么委托?给点简单的代码提示也好...谢谢!
追答
追加如下代码 需要更改listbox的时候就调用StartAction
具体参数可自行设置
delegate void MyAction(string text);
void AddMessage(string text)
{
// 此处操作listbox
}
void StartAction(string text)
{
MyAction myAction = AddMessage;
Invoke(myAction, text);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
}
定义一个public delegate void MsgEventHandler(string msg);
然后需要添加listbox时调用this.Invoke(new MsgEventHandler(_msg), new object[] {ex.Message})
void _msg(string msg)
{
lbxserver.Items.Add(msg);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看,你把客户端关闭后,你的发送线程依然开着,没有关,当你再次打开时容易产生错误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询