关于线程中调用修改主窗体中的控件

kingorange2309 2011-08-23 04:48:11
在一个窗体中创建一个线程,线程中的方法需要修改这个窗体中控件的属性,比如显隐等,可是调用时说不可修改创建线程窗体的控件,请高人指教如何实现
...全文
86 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanserzhao 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 g8t9_ 的回复:]
学习...
[/Quote]

要学习看我这个
http://topic.csdn.net/u/20110823/15/6e02718d-fedb-475e-b142-132dcb9634e4.html
G8T9_ 2011-08-23
  • 打赏
  • 举报
回复
学习...
yojinlin 2011-08-23
  • 打赏
  • 举报
回复

private void setTextBox1Visible_Click(object sender, EventArgs e)
{
Action func = () =>
{
this.textBox1.Visible = true;
};
if (this.textBox1.InvokeRequired)
{
this.textBox1.Invoke(func);
}
else
{
func();
}
}
lanserzhao 2011-08-23
  • 打赏
  • 举报
回复
例:
private delegate void WriteTxtDelegate(TextBox tb,string p_info);


private void WriteTextBox(TextBox tb,string p_info)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new WriteTxtDelegate(WriteTextBox), new object[] { tb, p_info });
}
else
{
lock (sTxtBoxObj)
{
try
{
int intLine = System.Text.RegularExpressions.Regex.Matches(tb.Text, "\r\n").Count;
if (intLine > 200)
tb.Text = DateTime.Now.ToString() + ":" + p_info + "\r\n";
else
tb.Text += DateTime.Now.ToString() + ":" + p_info + "\r\n";

tb.Select(tb.TextLength, 0);
tb.ScrollToCaret();
}
catch { }
}
}

}



还有,你给的分太少了
lanserzhao 2011-08-23
  • 打赏
  • 举报
回复
用委托,invoke,我刚碰到过




我还有个问题呢,有时间帮我看下

http://topic.csdn.net/u/20110823/15/6e02718d-fedb-475e-b142-132dcb9634e4.html?98078
在码农的生活,很多级码农都有这样的经历,会被一个小小的技术问题拦住,然后进度跟不上了,被老板XXXX一大通了。心情不爽了。 好吧,这个曾经是我遇到拦路虎之一。但事实上不是什么大技术。技术就是一层纸,破了就破了。 这是一个关于如何跨窗体操作控件或过程的一个例子。比如,你想用窗体A的按键来执行窗体B的文本框变色。 Imports System Imports System.Threading Imports System.Text Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load CheckForIllegalCrossThreadCalls = False '不写这行,会出错,不允许线程的数据写到TextBox1.Text 去。 Form2.Show() End Sub Private Sub form1_FormClosing(sender As Object, e As EventArgs) Handles Me.FormClosing ' If runThread.IsAlive = True Then runThread.Abort() End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '用的是委托方式 Me.Invoke(New MethodInvoker(AddressOf THREAD2)) End Sub Private Sub THREAD2() Static j As Integer j = j + 1 TextBox1.Text = " 这是 [线程] 操作" & vbCrLf & _ " Button2被点了: " & j & " 次" & vbCrLf & "要求是from2.textbox.text= textbox1.text 。[问题]但为什么不能成功显示呢?" End Sub Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged Form2.TextBox1.Text = TextBox1.Text End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Static j As Integer j = j + 1 TextBox1.Text = " 这是 [非线程] 操作" & vbCrLf & _ "Button3 点击了: " & j & " 次" & vbCrLf & _ "要求是from2.textbox.text= textbox1.text, 可以成功显示,这个是对的。" End Sub End Class

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧