НАКОНЕЦ!Я получил его и запустил!
Причина выброса
System.InvalidCastException
всякий раз, когда я пытался ссылаться на parentWindow в mshtml.IHTMLDocument2 и / или назначать его в mshtml.IHTMLWindow2 оконный объект был связан с Threading.
По какой-то неизвестной мне причине кажется, что COM-объекты mshtml.IHTMLWindow работают в другом потоке, который должен быть однопотоковым (STA).state.
Итак, хитрость была в том, чтобы вызвать / выполнить требуемый фрагмент кода в другом потоке с состоянием STA.
Вот пример кода:
SHDocVw.InternetExplorer IE = new SHDocVw.InternetExplorer
bool _isRunning = false;
private void IE_DocumentComplete(object pDisp, ref obj URL)
{
//Prevent multiple Thread creations because the DocumentComplete event fires for each frame in an HTML-Document
if (_isRunning) { return; }
_isRunning = true;
Thread t = new Thread(new ThreadStart(Do))
t.SetApartmentState(ApartmentState.STA);
t.Start();
}
private void Do()
{
mshtml.IHTMLDocument3 doc = this.IE.Document;
mshtml.IHTMLElement player = doc.getElementById("player");
if (player != null)
{
//Now we're able to call the objects properties, function (members)
object value = player.GetType().InvokeMember("getLastSongPlayed", System.Reflection.BindingFlags.InvokeMethod, null, player, null);
//Do something with the returned value in the "value" object above.
}
}
We 'Теперь он также может ссылаться на parentWindow объекта mshtml.IHTMLDocument2 и выполнять скрипт сайтов и / или наш собственный (помните, что он должен быть в потоке STA):
mshtml.IHTMLWindow2 window = doc.parentWindow;
window.execScript("AScriptFunctionOrOurOwnScriptCode();", "javascript");
Это может спасти кого-то от головной болив будущем.лол