Я пытаюсь получить мою голову вокруг нитей, в моих текущих потоках приложения будет лучшим способом справиться с этим, то, что у меня есть:Начиная использовать темы
public void threadsTest() {
Invoke(new MethodInvoker(() => {
// loop over the listview getting the first value
foreach (ListViewItem item in listViewBacklinks.Items)
{
// try...
try
{
var mainURL = item.Text;
using (WebClient wc = new WebClient())
{
try
{
var pageHtml = wc.DownloadString(mainURL);
if (pageHtml.Contains(Text))
{
var subitems = item.SubItems.Add("<a href=\"" + item.SubItems[1].Text + "\">anchor text</a>");
item.BackColor = Color.Green;
}
else
{
item.BackColor = Color.Red;
}
} catch (Exception)
{
item.BackColor = Color.Red;
}
//Helpers.returnMessage("Work done!");
}
} catch (Exception ex) {
Helpers.returnMessage(ex.ToString());
}
}}));
}
private void btnAnalyzeAnchorText_Click(object sender, EventArgs e)
{
// attempting threads
var t = new Thread(threadsTest);
t.Start();
}
Я думал, как BackgroundWorker так ли не затормозил бы GUI, но он сделал так, чтобы я включил вызов для доступа к элементам GUI, я не думаю, что это выглядит правильно, так как теперь графический интерфейс остается невосприимчивым, пока работа не будет выполнена, я просмотрел некоторые учебники но он не полностью погружается, любая помощь/советы по крекингам будет отличной.
'Invoke()' запускает данный код в потоке пользовательского интерфейса, поэтому неудивительно, что ваш интерфейс заблокирован. Invoke/BeginInvoke - только самая маленькая часть кода, которую вы можете (например, установка BackColor здесь). Если ваш список слишком велик, вы часто можете столкнуться с проблемами с обновлением пользовательского интерфейса. Я бы предложил заглянуть в async/wait, поскольку это был бы более элегантный способ делать то, что вы пытаетесь. –
Возможный дубликат процесса [C# run без замораживания моего графического интерфейса приложения] (http://stackoverflow.com/questions/2773448/c-sharp-run-process-without-freezing-my-apps-gui) –
WebClient - это GUI, поэтому ваше приложение просто не подходит для потоковой обработки ... –