C#如何给在运行中的线程传值

如果一个线程已经开始运行了,我想改变其中的值,该怎么做?比如我form1里有个按钮,按了之后listbox会每隔一秒显示一个数System.Timers.Timertte... 如果一个线程已经开始运行了,我想改变其中的值,该怎么做?
比如我form1里有个按钮,按了之后listbox会每隔一秒显示一个数
System.Timers.Timer ttest = new System.Timers.Timer();
private void button2_Click_2(object sender, EventArgs e)
{
testclass t = new testclass();
Thread mythread = new Thread(() => t.fun());
mythread.Start();
}

然后在testclass的函数是这样的
class testclass
{
private delegate void listbox(string str);
System.Timers.Timer ttest = new System.Timers.Timer();
public int i = 0;
private void additem(string str)
{
Form1.logbox1.Items.Add(str);
}
public void fun()
{
for (int j = 1; j < 10; j++)
{
i++;
Thread.Sleep(1000);
Form1.logbox1.Invoke(new listbox(additem), i.ToString());
}
}
}
如果我想在中途改变i的值,我该怎么做?跪谢
展开
 我来答
空雪梦见
2013-12-09 · TA获得超过5597个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1197万
展开全部
1、i 声明为成员变量而不是局部变量
2、testclass种提供一个成员函数来改变i的值
3、t声明为Form1的成员变量而不是局部变量
4、调用t上的步骤2中所说的成员函数来达到目的

如果为了防止正好++i的时候那个方法被调用,可以弄个锁防止多个线程同时操作i
板凳瓜子准备好了
2013-12-09 · TA获得超过163个赞
知道小有建树答主
回答量:278
采纳率:0%
帮助的人:130万
展开全部
可以使用公用变量来解决,只是要给公用变量加锁LOCK
更多追问追答
追问
嗯。。我知道可以用public static来解决。。但是我不想用这个。。。有动态传值的方法么?
追答
我这里是暂时没有了,看看还有没有其他大神吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式