.NET Windows Forms WebBrowser コントロールから DIV の html 要素テキスト値を取得する次の C# コードがあります。
private void cmdGetText_Click(object sender, EventArgs e)
{
string codeString = string.Format("$('#testTextBlock').text();");
object value = this.webBrowser1.Document.InvokeScript("eval", new[] { codeString });
MessageBox.Show(value != null ? value.ToString() : "N/A", "#testTextBlock.text()");
}
private void myTestForm_Load(object sender, EventArgs e)
{
webBrowser1.DocumentText =
@"<!DOCTYPE html><html>
<head>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
</head>
<body>
<div id='testTextBlock'>Lorem ipsum dolor sit amet, consectetur adipisicing elit...</div>
</body>
</html>";
}
それはうまくいきます。同期的に動作します。
cmdGetText_Click メソッドの最初の非同期バリエーションを次に示します。
private async void cmdGetText_Click(object sender, EventArgs e)
{
string codeString = string.Format("$('#testTextBlock').text();");
object value = await Task.Factory.StartNew<object>(() =>
{
return this.Invoke(
new Func<object>(() =>
{
return
this.webBrowser1.Document
.InvokeScript("eval", new[] { codeString });
}));
});
MessageBox.Show(value != null ? value.ToString() : "N/A", "#myTestText.text()");
}
cmdGetText_Click メソッドの 2 番目の非同期バリエーションは次のとおりです。
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class myTestForm : Form {
...
private async void cmdGetText_Click(object sender, EventArgs e)
{
webBrowser1.ObjectForScripting = this;
string codeString = string.Format("window.external.SetValue($('#testTextBlock').text());");
await Task.Run(() =>
{
this.Invoke((MethodInvoker)(()=>{this.webBrowser1.Document.InvokeScript("eval", new[] { codeString });}));
});
}
public void SetValue(string value)
{
MessageBox.Show(value != null ? value.ToString() : "N/A", "#myTestText.text()");
}
質問: 元の cmdGetText_Click メソッドの実用的な非同期バリエーション、ここで提示された以外のいくつかのアプローチを使用するバリエーションはありますか? ここに投稿する場合は、対象タスクのコーディング ソリューションのアプローチを好む理由も投稿してください。
ありがとうございました。
[アップデート]
これは、WebBrowser コントロールが UI スレッドからの最初のサンプル/非同期バリアントでアクセスされることを示すスクリーンショットです。
[アップデート]
これは、UI スレッドからの 2 番目のサンプル/非同期バリアントで WebBrowser コントロールにアクセスすることを示すスクリーンショットです。