Организовать "общение" с главного потока по индексу 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д