当使用多个Webview且URL过多时,UWP应用程序将挂起

时间:2020-02-25 11:57:42

标签: c# uwp

我必须在URL之间轮换(比如说10个URL)。每个网址都有自己的Web视图,每个Web视图显示15秒(一次)。我可以从服务器更改URL,然后立即显示在UWP应用程序上。

如果互联网不可用,则在间隔之后,WebView仍应在所有URL之间旋转,这就是我们使用多个WebView的原因。

目前的情况是,我更改的URL越多,占用的RAM越多,最终挂起。

1 个答案:

答案 0 :(得分:0)

WebViews是重量级控件,请不要创建多个实例来呈现html页面,在这种情况下,您可以使用计时器每15秒使用mvvm模式更改一个webview的源。即使互联网不可用,它仍然可以工作。请检查以下代码。

public sealed partial class MainPage : Page, INotifyPropertyChanged
{
    public MainPage()
    {
        this.InitializeComponent();
        initUri();
        var timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromSeconds(15);
        timer.Tick += Timer_Tick;
        timer.Start();
        Source = new Uri("xxxxxx");

    }
    private List<Uri> _uris = new List<Uri>();
    private void initUri()
    {

        _uris.Add(new Uri("xxxxxx"));
        _uris.Add(new Uri("xxxxxx"));
        _uris.Add(new Uri("xxxxxx"));       

    }

    int count = 0;
    private void Timer_Tick(object sender, object e)
    {

        Source = _uris[count];
        count++;
        if (count == _uris.Count)
        {
            count = 0;
        }
    }



    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    private Uri _source;
    public Uri Source
    {
        get
        {
            return _source;
        }

        set
        {
            _source = value;
            OnPropertyChanged();
        }
    }
}

Xaml

<WebView
    x:Name="MyWebView"
    HorizontalAlignment="Stretch"
    VerticalAlignment="Stretch"
    Source="{x:Bind Source, Mode=OneWay}"
    />