以前做过一个子窗体操作父窗体中控件的例子,就是在子窗体实例化的时候把父窗体中的空间当成子窗体构造函数的参数传过去即可。我想把这个思路用在线程控制控件显示的例子上(当然用委托可以办到)。大体思路是这样的: 声明一个类clsWriteLabel封装要做的事情
//变量
public string num
//构造函数
public clsWriteLabel(ref string _num)
{
this.num = _num;
}
//方法
public void WriteLabe()
{
for (int i = 100; i < 10000; i++)
{
num = i.ToString();
}
} 主窗体
//声明私有变量(用静态变量也试过)
private string num;
//方法
private void StartThreads()
{
//实例化类
clsWriteLabel clsWriteLabel = new clsWriteLabel(ref this.num);
//开始线程
Thread Thread = new Thread(new ThreadStart(clsWriteLabel.WriteLabe));
Thread.Start();
//扫面num的值在窗体控件上显示
while (!StopListeningFlag)
{
// 等待用户按下停止按钮。
this.label1.Text = num;
// 在等待过程中,让系统处理其他事件。
System.Windows.Forms.Application.DoEvents();
}
//终止线程
Thread.Interrupt();
}
以上是主要代码段。我测试的过程中在窗体上num的值一直都是NULL,但是线程里面的num已经赋值了,这个值怎么传不过来?
//变量
public string num
//构造函数
public clsWriteLabel(ref string _num)
{
this.num = _num;
}
//方法
public void WriteLabe()
{
for (int i = 100; i < 10000; i++)
{
num = i.ToString();
}
} 主窗体
//声明私有变量(用静态变量也试过)
private string num;
//方法
private void StartThreads()
{
//实例化类
clsWriteLabel clsWriteLabel = new clsWriteLabel(ref this.num);
//开始线程
Thread Thread = new Thread(new ThreadStart(clsWriteLabel.WriteLabe));
Thread.Start();
//扫面num的值在窗体控件上显示
while (!StopListeningFlag)
{
// 等待用户按下停止按钮。
this.label1.Text = num;
// 在等待过程中,让系统处理其他事件。
System.Windows.Forms.Application.DoEvents();
}
//终止线程
Thread.Interrupt();
}
以上是主要代码段。我测试的过程中在窗体上num的值一直都是NULL,但是线程里面的num已经赋值了,这个值怎么传不过来?
解决方案 »
- C#程序中如何控制产品的上行带宽,大概限制在总带宽的10%。
- 请问通过什么方法可以把select 语句的count 结果填入到textBox1.text里去
- c#引用webservice的问题,求源码
- winform打包问题
- Developer Express .NET v8.1 XtraGrid控件问题
- 急啊!关于 CrystalReport 问题!!! 高手进来
- 网页水晶报表翻页后数据显示不正确
- 又要麻烦各位大哥了,在线等,解决给分,指定的转换无效
- win8应用开发如何使用Httpclient向服务器POST一段json数据
- Excel合并单元格怎么解决?
- C语言新手求教一个语法错误
- XML。。
private string sHello;
private void button1_click(object sender, EventArgs e)
{
string hello = "test";
AssignString(ref hello); hello = "tttttt";
System.Diagnostics.Debug.WriteLine(sHello);//"还是显示test
}
private void AssignString(ref string tt)
{
sHello = tt;
}
Thread.Start();
并没有把参数传给子线程感觉在主线程中实例话的那个clsWriteLabel和子线程一点关系也没有