c #Subthread卡住了Thread.join()

时间:2012-11-30 09:52:10

标签: c# multithreading static deadlock

我们有一段以前运行良好的代码,现在它卡住了,问题似乎是运行时更新或类似的东西吗?

我们启动一个显示表单对话框的子线程并获取一个值,该值通过静态类中的静态变量返回到主线程,并且在该语句中线程被卡住并且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给予能解释为什么子线程卡住了访问静态变量的人...

0 个答案:

没有答案