C#中 多线程参数的问题

发布网友 发布时间:2022-04-24 11:48

我来回答

4个回答

热心网友 时间:2023-10-11 18:03

可以使用异步委托来实现参数的传递.代码势示例:
delegate string MyMethod3Delegate(string parameter);
private void button3_Click(object sender, System.EventArgs e) {
MyClass instance = new MyClass();
MyMethod3Delegate myMethod3 = new MyMethod3Delegate(instance.MyMethod3);
myMethod3.BeginInvoke("parameterValue",new AsyncCallback(AfterMyMothod3),null);
}
public void AfterMyMothod3(IAsyncResult result){
AsyncResult async = (AsyncResult) result;
MyMethod3Delegate DelegateInstance = (MyMethod3Delegate) async.AsyncDelegate;
Console.WriteLine ("函数调用返回值:{0}\n", DelegateInstance.EndInvoke(result));

}

首先为了使用委托我们声明了一个MyMethod3Delegate的委托,该委托说明一个参数和返回值为string的函数是符合条件的,所以我们在MyClass里面定义了一个MyMethod3的方法。该函数的型构符合上面的委托,所以我们可以在Button3点击的时候用这个方法实例化一个委托,然后我们使用异步的方式调用这个方法,为了得到返回结果我们写了AfterMyMothod3方法用来显示该函数的执行结果。运行程序点击Button3可以看到Output中输出的结果为MyMethod3带参数执行的结果

热心网友 时间:2023-10-11 18:03

把线程封装到一个类中,然后利用构造函数传参,这种估计最简单了:
public class subClass
{
int a;
public subClass(int intTemp)
{
this.a = intTemp;
}
public void Thread1()
{
//可以使用a的值
}
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
subClass a = new subClass(10);//参数10
Thread t = new Thread(new ThreadStart(a.Thread1));
t.Start();
}
上面传进去的10可以在Thread1方法里调用...

热心网友 时间:2023-10-11 18:04

三根鞋带说得很好了,以下狗尾续貂:
1.如果不需要得到返回值,可以考虑一下使用线程池(工作线程或定时器线程非常便利)
2.如果需要返回值,且多个线程(超过2个)要求异步运行,那不如就用普通线程+数据同步的传统技术,DotNet Framework1.1中的Monitor、Mutex以及信号灯都是很不错的。
3.如果需要返回值,且线程之间存在宏观过程方面的同步,或核心数据的访问同步,我觉得三根鞋带的方法非常好。

热心网友 时间:2023-10-11 18:05

哥们,抢我的分数啊

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com