C# 如何将参数传递给.Net中的线程
我的职能是:C# 如何将参数传递给.Net中的线程,c#,.net,C#,.net,我的职能是: public void view(string msg) { messagebox.show(msg); } . 我想从线程向它传递参数。。我正在使用.NET1.1。如何做到这一点?对于.NET 1.1,没有直接的方法,只能使用同时具有这两个属性的对象,在本例中(根据MSDN示例修改),ThreadState类被实例化并传递所需的状态,然后调用其方法并使其使用传递的状态 public class ThreadState { private string msg;
public void view(string msg)
{
messagebox.show(msg);
}
.
我想从线程向它传递参数。。我正在使用.NET1.1。如何做到这一点?对于.NET 1.1,没有直接的方法,只能使用同时具有这两个属性的对象,在本例中(根据MSDN示例修改),ThreadState类被实例化并传递所需的状态,然后调用其方法并使其使用传递的状态
public class ThreadState {
private string msg;
// The constructor obtains the state information.
public ThreadState(string msg) {
this.msg = msg;
}
public void view() {
//Do something with msg
}
}
public class Example {
public static void Main() {
ThreadState ts = new ThreadState("Hello World!");
// Create a thread to execute the task, and then
// start the thread.
Thread t = new Thread(new ThreadStart(ts.view));
t.Start();
t.Join();
}
}
对于.NET>1.1(原始问题未说明版本。)
在Start方法中传递参数。您将收到一个需要转换回正确类型的对象
Thread t = new Thread(view);
t.Start("Hello");
public void view(object msg)
{
string m = (string)msg;
//Use msg
}
要么这样,要么使用委托。对于.NET 1.1,没有直接的方法,只能使用同时具有这两个属性的对象,在本例中(根据MSDN示例修改),ThreadState类被实例化并传递所需的状态,然后调用其方法并使其使用传递的状态
public class ThreadState {
private string msg;
// The constructor obtains the state information.
public ThreadState(string msg) {
this.msg = msg;
}
public void view() {
//Do something with msg
}
}
public class Example {
public static void Main() {
ThreadState ts = new ThreadState("Hello World!");
// Create a thread to execute the task, and then
// start the thread.
Thread t = new Thread(new ThreadStart(ts.view));
t.Start();
t.Join();
}
}
对于.NET>1.1(原始问题未说明版本。)
在Start方法中传递参数。您将收到一个需要转换回正确类型的对象
Thread t = new Thread(view);
t.Start("Hello");
public void view(object msg)
{
string m = (string)msg;
//Use msg
}
要么这样做,要么使用委托。有多种方法可以做到这一点。一种是使用委托,它允许将Object类型的单个参数传递给线程。将view方法更改为accept Object,然后将Object强制转换为方法内的字符串。有多种方法可以做到这一点。一种是使用委托,它允许将Object类型的单个参数传递给线程。将视图方法更改为接受对象,然后将对象强制转换为方法内的字符串。ParamaterizedThreadStart委托在.NET 1.1(2003)中不存在,thread.Start也不接受1.1中的对象参数。但是,您可以尝试以下方法: dict[mythread.name]=myval//dict是类作用域变量。
mythread.Start() ParamaterizedThreadStart委托在.NET 1.1(2003)中不存在,thread.Start在1.1中也不接受对象param。但是,您可以尝试以下方法: dict[mythread.name]=myval//dict是类作用域变量。
mythread.Start() Vinko提供的第一个代码片段正是.NET 1.x下所需的,因为原始线程名称空间没有提供用于参数化_beginthread的内置机制 因此,您创建了一个包含所需数据的状态类,以及将在“new Thread()”语句中用于委托的方法,如Vinko所示 我正要敲出一个示例,然后我看到了他的示例代码。如果它“不起作用”,那么有必要明确说明原因,因为用肉眼看,代码看起来太熟悉了 其中一个“技巧”是正确封装线程构造以及线程启动/连接行为 另一个选项是使用ThreadPool.QueueUserWorkItem(),这两个选项并不完全相同,如果过度使用,可能会导致线程池性能不佳
另一个选项是创建一个信号阻塞的线程,例如ManualResetEvent,该信号在数据成员初始化时设置。目标数据成员可以像上面所示的对象引用一样简单,也可以使用ArrayList、Queue或Stack对象(具有适当的锁定)来实现一种“队列处理器”,其中工作项可以由专用线程排队和处理,专用线程保持休眠(阻塞等待信号)直到有工作可用。Vinko提供的第一个代码片段正是.NET 1.x下所需的,因为原始线程名称空间没有提供用于参数化beginthread的内置机制 因此,您创建了一个包含所需数据的状态类,以及将在“new Thread()”语句中用于委托的方法,如Vinko所示 我正要敲出一个示例,然后我看到了他的示例代码。如果它“不起作用”,那么有必要明确说明原因,因为用肉眼看,代码看起来太熟悉了 其中一个“技巧”是正确封装线程构造以及线程启动/连接行为 另一个选项是使用ThreadPool.QueueUserWorkItem(),这两个选项并不完全相同,如果过度使用,可能会导致线程池性能不佳
另一个选项是创建一个信号阻塞的线程,例如ManualResetEvent,该信号在数据成员初始化时设置。目标数据成员可以像上面所示的对象引用一样简单,也可以使用ArrayList、Queue或Stack对象(具有适当的锁定)来实现一种“队列处理器”,其中工作项可以由专用线程排队和处理,专用线程保持休眠(阻塞等待信号)在有可用的工作之前。创建一个类,将属性设置为参数并运行该类的相关函数
Dim run = New Runner()
run.mile = 20
run.pace = "slow"
Thr.Start(run.Process())
或者您需要使用全局范围变量。不幸的是,对于.NET 1.1,没有其他方法可以创建一个类,将属性设置为参数并运行该类的相关函数
Dim run = New Runner()
run.mile = 20
run.pace = "slow"
Thr.Start(run.Process())
或者您需要使用全局范围变量。不幸的是,在.NET 1.1中没有其他方法,您在新线程中执行此函数?您看到了吗?您在新线程中执行此函数了吗?您看到了吗?这不是有点不正常吗?我更喜欢使用更显式的方法,即使用一个类将参数传递给线程。这肯定有点麻烦,但在.NET 1.1中没有显式的方法将对象传递给另一个线程。这不是有点麻烦吗?我更喜欢使用更显式的方法,让一个类将参数传递给线程。这肯定有点老套,但在.NET 1.1中没有显式的方法将对象传递给另一个线程。这绝对是在.NET 1.1中最清晰的方法。(除了小写方法命名约定之外)事实上,我在较新的版本中仍然使用它,而不是将参数传递给Start,这需要