C# 从被调用线程将信息返回到主线程?
我在主线程中有一个“字符串”和一个“StreamReader”。我想将这些传递给一个线程,该线程将streamreader读入字符串。我希望在主线程中更改该字符串。我的问题是我如何做到这一点C# 从被调用线程将信息返回到主线程?,c#,multithreading,parameters,C#,Multithreading,Parameters,我在主线程中有一个“字符串”和一个“StreamReader”。我想将这些传递给一个线程,该线程将streamreader读入字符串。我希望在主线程中更改该字符串。我的问题是我如何做到这一点 附加信息:我有具体的原因,为什么我想线程,所以请坚持的规格。另外,我不能使用TPL,因为我无法获得Framework4.0。。。同样是出于特定的原因。因此,您可以使用字符串和StreamReader属性创建一个类。您可以使用ParameterizedThreadStart将该类的实例传递给其他线程。通过写入
附加信息:我有具体的原因,为什么我想线程,所以请坚持的规格。另外,我不能使用TPL,因为我无法获得Framework4.0。。。同样是出于特定的原因。因此,您可以使用
字符串和StreamReader
属性创建一个类。您可以使用ParameterizedThreadStart
将该类的实例传递给其他线程。通过写入类实例上的string
属性,可以让另一个线程填充毛茛
线程完成后,将填充类实例上的字符串属性。耶
大概是
class Foo {
public string Bar { get; set; }
}
然后:
哇
我省略了StreamReader
,但现在您明白了重点。在创建线程时,您有parameteredThreadStart
委托和一个可以传递到那里的参数。只需创建一个具有两个属性的类——string
和StreamReader
(可能还有您想要传递的任何其他属性),并将该类的实例传递给线程启动方法
public class ThreadStartParam
{
public string Str { get; set; }
public StreamReader StreamReader { get; set; }
}
class Program
{
static void Main(string[] args)
{
var t = new Thread(YourMethod);
var param = new ThreadStartParam();
param.Str = "abc";
param.StreamReader = new StreamReader();
t.Start(param);
}
static void YourMethod(object param)
{
var p = (ThreadStartParam) param;
// whatever
}
}
去年某个时候,我写了一篇关于这一点的博客文章,我想它将涵盖如何正确地与线程通信以及如何从线程返回。基本上,创建一个要传递给线程和从线程传递出去的对象,可以使用ParameterizedThreadStart传递给线程,也可以通过调用委托来传递回线程
更具体地说,在主线程实现传递给线程的已更改字符串的示例中,我建议在线程完成时,调用一个方法,将字符串值传回并重新设置原始字符串的值。这将防止线程在主线程可能尝试读取字符串时添加到字符串中
public class ThreadStartParam
{
public string Str { get; set; }
public StreamReader StreamReader { get; set; }
}
class Program
{
static void Main(string[] args)
{
var t = new Thread(YourMethod);
var param = new ThreadStartParam();
param.Str = "abc";
param.StreamReader = new StreamReader();
t.Start(param);
}
static void YourMethod(object param)
{
var p = (ThreadStartParam) param;
// whatever
}
}