我们有一段以前运行良好的代码,现在它卡住了,问题似乎是运行时更新或类似的东西吗?
我们启动一个显示表单对话框的子线程并获取一个值,该值通过静态类中的静态变量返回到主线程,并且在该语句中线程被卡住并且visual studio没有说任何关于发生了什么...是否有另一种方法来返回值(在某些情况下,有多个字符串要返回)
我们需要特别采用这种方式,因为我们的软件是如何为工作添加附加程序的。
示例代码:
public static Cons
{
public static string inputvalue;
}
public static Funs
{
public static string GetValueString()
{
Thread threadx = new Thread(GetValueStringx);
threadx.SetApartmentState(ApartmentState.STA);
threadx.Start();
if (threadx.Join(new TimeSpan(0, 3, 0)))
{
return ComprobarLicencia(Cons.inputvalue);
}
/*because the subthread is stuck the wait time (3mins) is always
reached and the code continues here, not getting the input value :/ */
try
{
threadx.Abort();
}
catch
{
}
return "";
}
public static string GetValueStringx()
{
WindowWrapper window = new WindowWrapper(Fun.GetForegroundWindow());
FormInput formlicencia = new FormLicencia();
formlicencia.ShowDialog(window);
Cons.inputvalue = formlicencia.inputvalue; //thread gets stuck here
/*even if i comment all the above lines and i put
directly Cons.inputvalue="valx"; it gets stuck too :s */
}
}
最后,我使用this response中的this question解决了问题。 是否有某种方式可以归功于该用户?如果不是,我会将anwser或upvotes给予能解释为什么子线程卡住了访问静态变量的人...