是否可以在Navigating事件的处理程序中更改WebBrowser控件正在导航的Uri?
事件参数中的Uri无法更改,因为它是只读的,但是,我尝试取消导航并使用Navigate方法将浏览器发送到新地址,如下所示:
// I can not do this.
// e.Uri = new Uri( "http://newUri" );
e.Cancel = true;
( (WebBrowser)sender ).Navigate( new Uri( "http://newUri" ) );
然而,这使我的应用程序崩溃,没有任何例外。
有人知道这个问题的解决方案吗?
答案 0 :(得分:1)
我的猜测是你导致堆栈溢出。每次导航事件触发时,您都会告诉浏览器再次导航,这会再次引发事件......
尝试添加布尔值以停止代码递归...
private bool isRedirecting = false;
private void WebBrowser_OnNavigate(object sender, EventArgs e)
{
if (isRedirecting)
return;
e.Cancel = true;
isRedirecting = true;
( (WebBrowser)sender ).Navigate( new Uri( "http://newUri" ) );
isRedirecting = false;
}
答案 1 :(得分:0)
事实证明这是一个模拟器错误。我的方法使应用程序在模拟器上运行时崩溃,但它在真实设备上正常运行。