IE(6+)用のツールバーを書いています。のさまざまなサンプルバーを使用しました
codeproject.com ( http://www.codeproject.com/KB/dotnet/IE_toolbar.aspx )、および機能するツールバーを持っており、登録解除などを登録します。ツールバーに実行させたいのは、html ページ内の div を次のように強調表示することです。ユーザーのマウスがその div の上を移動します。これまでのところ、強調表示コードは機能しますが、div の名前 (存在する場合) をツールバーのラベルに表示したいと思います (マウスの移動などに応じて変化します)。
私の人生ではこれを実現することはできず、デバッグしようとするのは悪夢です。アセンブリは IE でホストされているため、そのコントロールを作成していないスレッドからラベルのテキストを更新しようとすることで (IE で) 例外が発生していると思われますが、IE で例外が発生しているため、見ないでください。
Invoke を使用してスレッドセーフな方法でコントロールを更新しようとする解決策はありますか? もしそうなら、どのように?
イベントコードは次のとおりです。
private void Explorer_MouseOverEvent(mshtml.IHTMLEventObj e)
{
mshtml.IHTMLDocument2 doc = this.Explorer.Document as IHTMLDocument2;
element = doc.elementFromPoint(e.clientX, e.clientY);
if (element.tagName.Equals("DIV", StringComparison.InvariantCultureIgnoreCase))
{
element.style.border = "thin solid blue;";
if (element.className != null)
{
UpdateToolstrip(element.className);
}
}
e.returnValue = false;
}
ツールバーのスレッドセーフな更新の試みは次のとおりです。
delegate void UpdateToolstripDelegate(string text);
public void UpdateToolstrip(string text)
{
if (this.toolStripLabel1.InvokeRequired == false)
{
this.toolStripLabel1.Text = text;
}
else
{
this.Invoke(new UpdateToolstripDelegate(UpdateToolstrip), new object[] { text });
}
}
どんな提案でも大歓迎です。