我有以下用 C# WinForms 编写的代码:
...
SHDocVw.WebBrowser_V1 axBrowser = (SHDocVw.WebBrowser_V1)webBrowser1.ActiveXInstance;
if (axBrowser != null)
{
axBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, axBrowser, new object[] { true });
}
axBrowser.NewWindow += axBrowser_NewWindow;
...
if (!webBrowser1.IsDisposed && !webBrowser1.Url.Equals("about:blank")) //System.NullReferenceException: Object reference not set to an instance of an object.
{
webBrowser1.Refresh(WebBrowserRefreshOption.Completely);
}
在 x86 平台上运行时出现空引用错误。在 x64 上运行时,一切正常。我想问题出在 Interop.SHDocVw 上。
编辑:在 if 条件下, webBrowser1.Url 部分变为空。所以我试过这样:(它没有给我任何错误,但控制是空的)
private void contextMenuStrip1_Click(object sender, EventArgs e)
{
try
{
if (!webBrowser1.IsDisposed && webBrowser1.Url !=null && !webBrowser1.Url.Equals("about:blank"))
{
webBrowser1.Refresh(WebBrowserRefreshOption.Completely);
}
else if (webBrowser1.Url == null)
{
MessageBox.Show("webBrowser1.Url ");
webBrowser1.AllowWebBrowserDrop = false;//MS bug?: {"Error HRESULT E_FAIL has been returned from a call to a COM component."} System.Runtime.InteropServices.COMException
webBrowser1.ScrollBarsEnabled = false;//false--MS bug?: {"Error HRESULT E_FAIL has been returned from a call to a COM component."} System.Runtime.InteropServices.COMException
webBrowser1.ScriptErrorsSuppressed = false;
WinInetInterop.RestoreSystemProxy();
SHDocVw.WebBrowser_V1 axBrowser = (SHDocVw.WebBrowser_V1)webBrowser1.ActiveXInstance;
if (axBrowser != null)
{
axBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, axBrowser, new object[] { true });
}
axBrowser.NewWindow += axBrowser_NewWindow;
webBrowser1.Url = new System.Uri("https://evidentacimitir.com/ProfitshareAds.html", System.UriKind.Absolute);
webBrowser1.WebBrowserShortcutsEnabled = false;
webBrowser1.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.webBrowser1_DocumentCompleted);
webBrowser1.Navigated += new System.Windows.Forms.WebBrowserNavigatedEventHandler(this.webBrowser1_Navigated);
}
}
catch (Exception ex)
{
ExceptionReportHelper.Exception(ex);
}
}
如何解决此问题以使其在 x86 平台上也能正常工作?
谢谢