По сути, я автоматизирую сайт с iframe и не запускаю DocumentComplete. Я запускаю форму в независимом потоке, который содержит WebBrowser. Я пытаюсь щелкнуть поиск в веб-браузере, он работает нормально, но я пытаюсь отделить браузер от формы по потокам, чтобы я мог сделать свой код в целом более процедурным и реализовать AutoResetEvent.
Вот метод поиска по клику:
public void ClickSearch()
{
if (search == null)
{
HtmlElementCollection links = Document.Window.Frames[0].Frames[1].Document.Links;
search = links.Cast<HtmlElement>()
.Where(x => x != null)
.FirstOrDefault(x => x.InnerText == "Search");
}
Doc.InvokeScript("htmlbSL", new object[]{search, 2, search.Id+":SEARCH", '0'});
}
Вот код, который его вызывает:
var evt = new AutoResetEvent(false);
HtmlElementEventHandler handler = null;
handler = new HtmlElementEventHandler(
delegate(object sender, HtmlElementEventArgs ev)
{
ev.BubbleEvent = false;
smsBrowser.Doc.Focusing -= handler;
worklist = new Worklist();
worklist.Load(smsBrowser.GetWorklistCsv());
SQLiteDatabase.InsertWorklist(worklist);
SQLiteDatabase.Commit();
SQLiteDatabase.FillWorklistGrid();
evt.Set();
});
smsBrowser.Doc.Focusing += handler;
Task.Factory.StartNew(() => smsBrowser.ClickSearch());
evt.WaitOne();
Линия:
HtmlElementCollection links = Document.Window.Frames[0].Frames[1].Document.Links;
дает мне InvalidCastException. Кроме того, любые советы о том, как лучше всего это сделать, будут высоко оценены, я хочу избегать Application.DoEvents(), я также хочу, чтобы это было больше процедур (у меня есть много событий, присоединяющихся и отсоединяющихся). Вызывающий метод также работает в обработчике событий, я хотел бы поместить их в один и тот же метод с реализованными ожиданиями для очистки моего кода.
Ранее я следовал этому руководству: http://www.albahari.com/threading/part2.aspx а>.
Вот детали исключения, хотя они не очень помогают.
An exception of type 'System.InvalidCastException' occurred in System.Windows.Forms.dll but was not handled in user code
Additional information: Specified cast is not valid.