我有一個簡單的函數,用一個模態窗體啓動一個線程,然後等待窗體關閉。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符號服務器。發佈你現在得到的堆棧跟蹤,如果你不知道。 –