У меня есть кнопка с именем submit_Button
, который имеет следующий код в OnClicked событие:WPF сбой приложения при использовании System.Threading.Thread
Thread thread = new Thread(new ThreadStart(heavyWork));
thread.Start();
heavyWork код функции:
private void heavyWork()
{
DisableUI();
string Name = Name_textBox.Text;
celebrityName = Name.Replace(" ", "+");
string queryURL = "http://stackoverflow.com";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(queryURL);
request.Method = "GET";
// make request for web page
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader htmlSource = new StreamReader(response.GetResponseStream());
string htmlStringSource = string.Empty;
htmlStringSource = htmlSource.ReadToEnd();
response.Close();
//var regex = new Regex(@"<FONT class=""result"">(.*?)</FONT>");
var regex = new Regex(@"<span class=""kno-a-v"">(.*?)</span>");
var match = regex.Match(htmlStringSource);
var result = match.Groups[1].Value;
result = HttpUtility.HtmlDecode(result);
MessageBox.Show(result);
EnableUI();
}
// Functions
private void DisableUI()
{
celebrityName_textBox.IsEnabled = false;
submit_Button.IsEnabled = false;
infoType_listBox.IsEnabled = false;
preloader_Image.Visibility = Visibility.Visible;
}
private void EnableUI()
{
celebrityName_textBox.IsEnabled = true;
submit_Button.IsEnabled = true;
infoType_listBox.IsEnabled = true;
preloader_Image.Visibility = Visibility.Hidden;
}
Когда я запускаю приложение, нажмите кнопку, приложение немедленно сработает!
Что происходит? Я пытался использовать BackgroundWorker Вместо этого, но когда я могу worker.RunWorkerAsync()
ничего не происходит (рабочий не запускается).
Какое исключение вы получаете? –
Во-первых, вы делаете материал пользовательского интерфейса в потоке, который не имеет элементов интерфейса. Возможно, вы захотите заглянуть в 'Dispatcher.Invoke'. Это даже начало «тяжелой работы»? Если это так, какая строка сбрасывает его? – Artless
, если вы закомментируете 'DisableUI()' и 'EnableUI()' все еще сбой? – Damith