編集:この質問の一部はすでに他の場所で回答されていますが、このスレッドはさらに情報を提供し、知っておくと便利かもしれません
タイトルはほとんどすべてを述べていますが、ここにいくつかの詳細情報があります:
グローバル WebbBowser オブジェクトの HTMLdocument を使用して特定のオブジェクト (つまり、テキスト ボックス) を検索する関数があります。オブジェクトが見つかると、値が与えられます。
関数は次のようになります。
public static void Set_Elements_Input(string element_name, string value)
{
HtmlElementCollection hec = _wb.Document.GetElementsByTagName("input");
foreach (HtmlElement he in hec)
{
if (he.GetAttribute("name") == element_name)
{
he.SetAttribute("value", value);
}
}
}
状況により、プログラミング環境でデバッグできません。したがって、生成された.exeを実行して、動作するかどうかを確認する必要があります..動作しません。
プログラムがクラッシュし、クラッシュ レポートには、クラッシュの原因が InvalidcastException であることが示されています。
MessageBox.Show() メソッドの助けを借りて、すべてがうまくいかないポイントを見つけることができました。
MessageBox.Show("I got here!");
HtmlElementCollection hec = _wb.Document.GetElementsByTagName("input");
MessageBox.Show("I didn't get here!");
これがどのように InvalidCastException をスローするのかがわからないので、これは奇妙に思えます。foreach がキャストで動作することは知っていますが、私のプログラムはそのコードに到達していないようです。それと、HTMLElementCollection は HTMLElements のコレクションであるため、InvalidCastException がどのように発生するかわかりません。コレクションが空の場合かもしれませんが、それには別の例外があると思います。
思ったよりも、スレッドを使用していて、呼び出しを使用する必要があるためかもしれません。しかしhttp://msdn.microsoft.com/en-us/library/system.windows.forms.htmlelementcollection.aspxは、HtmlElementCollections はスレッド セーフであると述べています (またはそれとは何の関係もありませんか?)。それと、関数は静的であるため、呼び出すことができるかどうかさえわかりません。
簡単に言えば、何が起こっているのですか?どうすれば修正できますか?