.NET MAUI中如何在SizeChanged事件内使用WebView.Reload()?
问题分析与解决方法
这个异常不是控件BUG,是调用时机不当导致的。应用启动初期,WebView控件还未完成初始化(比如Source尚未加载完成、控件未完全挂载到视觉树),此时调用Reload()会触发System.InvalidOperationException,因为WebView内部状态未准备好,不允许执行刷新操作。
解决方法
你可以通过以下方式规避这个问题:
判断控件就绪状态
在调用Reload()前,先检查WebView是否已加载完成且Source不为空:private void OnSizeChanged(object sender, EventArgs e) { // 确保WebView已加载且Source已设置 if (webView.IsLoaded && webView.Source != null) { webView.Reload(); } }延迟执行刷新操作
借助Dispatcher将刷新操作调度到UI线程的空闲时机,避免在初始化阶段的布局变更中执行:private void OnSizeChanged(object sender, EventArgs e) { Application.Current.Dispatcher.DispatchAsync(() => { if (webView.IsLoaded && webView.Source != null) { webView.Reload(); } }); }过滤无效尺寸变更
启动初期控件会经历多次布局调整,很多尺寸变化是初始化过程中的正常行为,你可以记录首次有效尺寸,只在后续真实的尺寸变更时执行刷新:private bool _isInitialLayoutComplete; private void OnSizeChanged(object sender, EventArgs e) { if (!_isInitialLayoutComplete) { // 标记初始化布局完成,跳过本次刷新 _isInitialLayoutComplete = true; return; } if (webView.IsLoaded && webView.Source != null) { webView.Reload(); } }
内容的提问来源于stack exchange,提问作者shalom
相关产品推荐
相关产品推荐

