winform 怎么让几个线程给一个文本框赋值

winform 怎么让几个线程给一个文本框赋值,第1张

为了安全起见微软不允许用户随便夸线程调用控件,一般采取托管的方法,这样比较安全。当然也可以用方法二强制跨线程调用。建议用方法一。

方法1 托管来实现

public delegate void SetTextHandler(string text)

private void SetText(string text)

{

if(textBox4.InvokeRequired==true)

{

SetTextHandler set=new SetTextHandler(SetText)//委托的方法参数应和SetText一致

textBox4.Invoke(set,new object[]{text})//此方法第二参数用于传入方法,代替形参text

}

else

{

textBox4.Text=text

}

}

方法2 在页面加这一句

CheckForIllegalCrossThreadCalls = false

用委托,具体代码如下~:

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

}

}

this.thread.Abort()将线程加到关闭队列中

this.thread.Join()等待线程关闭

如果你的对象是在线程里创建的,应该会自动释放,如果是全局的,应该自己手动释放。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/53476.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-02-25
下一篇2023-02-25

发表评论

登录后才能评论

评论列表(0条)

    保存