C# 子线程访问主窗体控件

我用C#编写了一个主窗体,里面通过按钮控制打开一个新线程:privatevoidserverstart_Click(objectsender,EventArgse){th... 我用C# 编写了一个主窗体,里面通过按钮控制打开一个新线程:
private void serverstart_Click(object sender, EventArgs e)
{
thThreadRead = new Thread(new ThreadStart(Listen));
thThreadRead.Start();//启动线程
}
线程里面我想对主窗体中的Listbox进行操作(add添加数据),直接操作控件的话会出错,请问该怎么操作?
那么这个obj该如何创建呢?对不起,我有新手,又点笨,不是很清楚,能说详细点吗?
展开
 我来答
百度网友dc91b32
推荐于2016-12-02 · TA获得超过5650个赞
知道大有可为答主
回答量:5653
采纳率:0%
帮助的人:0
展开全部
是的,
在其他线程里,不允许调用主线程创建的控件~!!!!
这样做,是不安全的,因此,2.0屏蔽了这个~

楼上说的很对,用委托,具体代码如下~:
public delegate void MyInvoke(string str);

private void button9_Click(object sender, EventArgs e)
{
//_myInvoke = new MyInvoke(SetText);
//CheckForIllegalCrossThreadCalls = false;
Thread t = new Thread(new ThreadStart(fun));
t.Start();
}

private void fun()
{
//_myInvoke("dddd");
SetText("ddd");
}
private void SetText(string s)
{
if (textBox6.InvokeRequired)
{
MyInvoke _myInvoke = new MyInvoke(SetText);
this.Invoke(_myInvoke, new object[] { s });
}
else
{
this.textBox6.Text = s;
}
}
karenback
2007-07-16 · TA获得超过454个赞
知道小有建树答主
回答量:208
采纳率:0%
帮助的人:185万
展开全部
在form声明中加上Control.CheckForIllegalCrossThreadCalls = false;
可以忽略控件得线程交叉引用错误
修改后如下:
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e72012dab
2007-07-16 · TA获得超过407个赞
知道小有建树答主
回答量:492
采纳率:0%
帮助的人:493万
展开全部
可以创建一个listbox对象obj,obj赋值为主窗体中的listbox,在线程里判断obj 是否为null不是则可以使用.就不会出错.

在From类中添加
private System.Windows.Forms.ListBox obj;

在From 的Load事件中添加
obj=this.ListBox1(根据你的名称改变)

在线程中使用前用
if(obj!=null)
{
//有效才使用
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
djzhou6688
2007-07-16 · TA获得超过187个赞
知道小有建树答主
回答量:389
采纳率:100%
帮助的人:309万
展开全部
.net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,推荐的解决方法是采用代理,用代理方法来间接操作不是同一线程创建的控件。

第二种方法是禁止编译器对跨线程访问作检查,可以实现访问,但是出不出错不敢保证Control.CheckForIllegalCrossThreadCalls = false;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d52942440
2007-07-16 · TA获得超过186个赞
知道答主
回答量:580
采纳率:0%
帮助的人:283万
展开全部
整一个全局的变量用用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式