You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI中如何在SizeChanged事件内使用WebView.Reload()?

问题分析与解决方法

这个异常不是控件BUG,是调用时机不当导致的。应用启动初期,WebView控件还未完成初始化(比如Source尚未加载完成、控件未完全挂载到视觉树),此时调用Reload()会触发System.InvalidOperationException,因为WebView内部状态未准备好,不允许执行刷新操作。

解决方法

你可以通过以下方式规避这个问题:

  1. 判断控件就绪状态
    在调用Reload()前,先检查WebView是否已加载完成且Source不为空:

    private void OnSizeChanged(object sender, EventArgs e)
    {
        // 确保WebView已加载且Source已设置
        if (webView.IsLoaded && webView.Source != null)
        {
            webView.Reload();
        }
    }
    
  2. 延迟执行刷新操作
    借助Dispatcher将刷新操作调度到UI线程的空闲时机,避免在初始化阶段的布局变更中执行:

    private void OnSizeChanged(object sender, EventArgs e)
    {
        Application.Current.Dispatcher.DispatchAsync(() =>
        {
            if (webView.IsLoaded && webView.Source != null)
            {
                webView.Reload();
            }
        });
    }
    
  3. 过滤无效尺寸变更
    启动初期控件会经历多次布局调整,很多尺寸变化是初始化过程中的正常行为,你可以记录首次有效尺寸,只在后续真实的尺寸变更时执行刷新:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:05:29