Организовать "общение" с главного потока по индексу ListBox с нужным WebBrowser - C#
Формулировка задачи:
Всем доброго времени.
Столкнулся с проблемой написания многопоточной софтины... вся суть в том, что есть у меня на WinForm загрузка файла в котором в каждой новой строке есть креды на аккаунт (акк,пасс), при загрузке данного списка, для каждого юзера должно создаваться динамически свой WebBrowser для подальших манипуляций данным экземпляром WebBrowser для юзера...
В общем, создаю N-ное кол-во потоков
которые в свою очередь создают экземпляр браузера, логинятся и данный экзепляр браузера запихиваю в Dictionary, чтоб потом при нажатии на ListBox на форме (какой-то юзер) можно было манипулировать нужным экзепляром браузера
Когда я делал это в одном потоке - при изменении индекса в ListBox - я мог вызывать нормально свой WebBrowser который находился в Dictionary, но сейчас с потоками оно перестало работать...
Подскажите плз как могу организовать "общение" с главного потока по индексу ListBox с нужным браузером (потоком).
Дополню еще немного, может запутался пока писал этот весь вопрос... на форме есть ListBox с загруженными юзерами (под каждым из них подразумевается экземпляр браузера), при нажатии на конкретную запись (юзера), должна в табличку заноситься разная инфа, которую буду доставать с браузера, + они должны работать параллельно, т.к. там будут бежать разные экшины
Вот примерно как выглядит форма
S если я совсем галимо разъяснил, вот можно посмотреть на "проект" сейчас он в одном потоке, но нада, как уже выше писал, в нескольких
for (int i = 0; i < LoadList.userDictionary.Count; i++)
{
usersList.Items.Add(LoadList.userDictionary.Elemen tAt(i).Key);
Thread th = new Thread(() => Main.mainWork(i, LoadList.userDictionary.ElementAt(i).Key, LoadList.userDictionary.ElementAt(i).Value));
th.IsBackground = true;
th.SetApartmentState(ApartmentState.MTA);
th.Start();
Thread.Sleep(100);
}public static void mainWork(int userIndex, string login, string pass)
{
WebBrowser webBrowser = new WebBrowser();
webBrowser.ScriptErrorsSuppressed = true;
webBrowser.Navigate("http://www.url.ua");
webBrowser.Document.GetElementById("email-input").SetAttribute("value", login);
webBrowser.Document.GetElementById("pwd-input").SetAttribute("value", pass);
foreach (HtmlElement el in webBrowser.Document.GetElementsByTagName("button"))
{
if (el.GetAttribute("type").Equals("submit"))
{
el.InvokeMember("click");
break;
}
}
webBrowsersDic.Add(userIndex, webBrowser);
Thread.Sleep(10);
}private void usersList_SelectedIndexChanged(object sender, EventArgs e)
{
Main.selectedAcc(usersList.SelectedIndex);
}Решение задачи: «Организовать "общение" с главного потока по индексу ListBox с нужным WebBrowser»
textual
Листинг программы
SomeObject obj = new SomeObject(i,LoadList.userDictionary.ElementAt(i).Key, LoadList.userDictionary.ElementAt(i).Value);
list.SelectedIndexChanged += obj.SomHandler;
/* либо (o,e) => {
...
obj.Handler();}
*/
Thread th = new Thread(() => Main.mainWork(obj);