我有一个简单的函数,用一个模态窗体启动一个线程,然后等待窗体关闭。Threadreference.isalive = true,但是在线程窗口中它的位置是[在睡眠中,等待或加入]
private static bool GetSomeText()
{
Thread threadx = new Thread(GetSomeTextx);
threadx.SetApartmentState(ApartmentState.STA);
threadx.Start();
int i = 0;
const int secs = 6000;
while (threadx.IsAlive && i < secs)
{
Thread.Sleep(1000);
i++;
}
if (i >= secs) //timeout
{
try
{
threadx.Abort();
}
catch { }
MessageBox.Show("Timeout etc.");
return false;
}
else
{
return CheckText(Constants.inputedtext);
}
}
private static void GetSomeTextx()
{
WindowWrapper window = new WindowWrapper(Fun.GetForegroundWindow());
FormGetSomeText epa = new FormGetSomeText { displaytext=Constants.displaytext};
epa.ShowDialog(window);
Constants.inputedtext= epa.inputedtext;
}
的问题是,关闭线程退出GetSomeTextx(),但仍然在冷宫窗口... 之后之后,如果我把休息中“,而(threadx.IsAlive & &我<秒) “我看到threadx.IsAlive是真实的,在调试窗口中,有问题的线程位置是:[在睡眠中,等待或加入],如果我执行右键单击 - >切换到线程,则显示”无源可用“并单击在显示反汇编中显示“没有可用的反汇编”。
此代码几乎是1:1个复制(在另外一个有2个文本框,而不是1)另一种情况的,我必须得值这样的,它能够正常工作......
有什么事情它是?
POSTDATA:在GetSomeTextx的无果结束试了已经加入Thread.CurrentThread.Abort ...
打开非托管调试并启用Microsoft符号服务器。发布你现在得到的堆栈跟踪,如果你不知道。 –