比如有方法
public string Method_1(int a,int b)
{
//
}
public string Method_2(int a,int b)
{
//
}
...
public string Method_n(int a,int b)
{
//
}
Thread myThread=new Thread...
想在myThread上调用多个方法.
而且a,b参数都必须由主线程传递...不知道大家有没有理解我的意思?
给个思路!
public string Method_1(int a,int b)
{
//
}
public string Method_2(int a,int b)
{
//
}
...
public string Method_n(int a,int b)
{
//
}
Thread myThread=new Thread...
想在myThread上调用多个方法.
而且a,b参数都必须由主线程传递...不知道大家有没有理解我的意思?
给个思路!
多个参数可以都封到object参数里~
这个方法简单,但不安全~~ParameterizedThreadStart ParStart = new ParameterizedThreadStart(ThreadMethod);
Thread myThread = new Thread(ParStart);
object o = "hello";
myThread.Start(o);//ThreadMethod如下:
public void ThreadMethod(object ParObject)
{
//程序代码
}
推荐安全方式~~
将线程执行的方法和参数都封装到一个类里面。通过实例化该类,方法就可以调用属性来实现间接的类型安全地传递参数。using System;
using System.Threading;//ThreadWithState 类里包含了将要执行的任务以及执行任务的方法
public class ThreadWithState {
//要用到的属性,也就是我们要传递的参数
private string boilerplate;
private int value; //包含参数的构造函数
public ThreadWithState(string text, int number)
{
boilerplate = text;
value = number;
} //要丢给线程执行的方法,本处无返回类型就是为了能让ThreadStart来调用
public void ThreadProc()
{
//这里就是要执行的任务,本处只显示一下传入的参数
Console.WriteLine(boilerplate, value);
}
}//用来调用上面方法的类,是本例执行的入口
public class Example {
public static void Main()
{
//实例化ThreadWithState类,为线程提供参数
ThreadWithState tws = new ThreadWithState(
"This report displays the number {0}.", 42); // 创建执行任务的线程,并执行
Thread t = new Thread(new ThreadStart(tws.ThreadProc));
t.Start();
Console.WriteLine("Main thread does some work, then waits.");
t.Join();
Console.WriteLine(
"Independent task has completed; main thread ends.");
}
}
[code=C#]
class A
{
private B b; private class B
{
int a,b;
public int c; public B(int a,int b)
{
this.a=a;
this.b=b;
} public void Method_1()
{ c=a+b;
}
public void Method_2()
{
c=a-b;
}
} void compute()
{
b.Method_1();
b.Method_2();
} public static void main()
{
b=new B(1,2);
Thread t=new Thread(new ThreadStart(compute));
t.start();
Console.Write(b.c);
}
}
[code]
(object[])new Thread(delegate(object ret)
{
object[] rets = (object[])ret;
rets[0]=Method1(a,b);
rets[1]=Method2(c,d);
rets[2]=Method3(e,f)};
//...
}).Start(return);
...把(object[])去掉
这里使用了t.join();方法后,如果t进程执行任务的时间为3秒钟,那在这3秒钟内,主线程是不能做任何事情的,也就是主窗体会卡住动不了,表现为就是如果在这3秒内,我想移动主窗体,就动不了,甚至会出现未响应,请问这个问题怎么解决呢?