如何从线程中获取字符串值

时间:2009-07-07 16:01:54

标签: c# multithreading string

我在C#中运行一个线程。 我有网络表格。我在网络表单中声明了公共字符串属性。 (例如字符串myVal) 然后我调用了线程并将值赋值给myVal。 它在其中分配值。 但是当我退出线程代码时,myVal变为null。

无论如何都要保持myVal值。

public string myVal;

protected void Page_Load(object sender, EventArgs e)
{
System.Threading.Thread myThread = new System.Threading.Thread(this.getVal);
            myThread.SetApartmentState(System.Threading.ApartmentState.STA);
            myThread.Start();
            myThread.Join();

//I am not able to get myVal string over here.

}

private void getVal()
{
myVal = "I can easily get myVal over here.";
}

4 个答案:

答案 0 :(得分:1)

您是否在代码中进一步引用myVal,或者您只是使用调试器检查它并在完成后检查它?如果是这样,垃圾收集者可能已经接受了它。

答案 1 :(得分:1)

测试用例失败:我将代码复制粘贴到新的ASP.NET项目中,并在myThread.Join()之后添加:

Label1.Text = myVal;

标签确实显示了你的字符串。

答案 2 :(得分:1)

一般来说,你似乎正在做的是尝试在创建它的线程退出后保持一个值。

我建议使用App域(MSDN)。简而言之,所有线程都位于AppDomain中(有关更多信息,请访问该链接),您已经拥有了该程序的性质。

那么你在你的情况下会做的是:

要“保存”数据:AppDomain.CurrentDomain.SetData("val", myVal);

要检索数据:AppDomain.CurrentDomain.GetData("val");

希望有所帮助

答案 3 :(得分:1)

我的猜测是你在getVal方法中得到“System.InvalidOperationException:跨线程操作无效”。你可以试一试它来验证是否抛出异常。我建议使用BackgroundWorker或其他形式的回调。