首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >框架需要加载一个网站才能显示页面

框架需要加载一个网站才能显示页面
EN

Stack Overflow用户
提问于 2012-08-25 02:38:13
回答 1查看 414关注 0票数 0

我有下面这个简单的程序,可以在两个不同的页面之间来回切换框架的上下文。第一个页面只是一张图片,加载正常,但第二个页面是一个帧,它的源被设置为实时天气雷达。http://www.wunderground.com/auto/wxmap/IN/Carmel.html。当计时器将帧的上下文切换到天气雷达页面时,它才开始加载,并在最初的3-4秒内加载页面。我在创建页面并将其分配给_nextslide之后立即检查了frame的.Navigated事件,那么为什么我的frame要等到页面显示出来才能呈现网站呢?这将是完美的,如果我可以显示该网站完全加载。

XAML:

代码语言:javascript
复制
<Page>
    <Viewbox Stretch="Fill" Margin="15">
        <Frame Height="800" Width="1280" Content="{Binding SlideFrame}"/>
    </Viewbox>
</Page>

C#:

代码语言:javascript
复制
private Page _slideFrame;
private Page _nextFrame;
private DispatcherTimer _slideChangeTimer;
private int currentSlide = 1;

// Property
public Page SlideFrame
{
    get { return _slideFrame; }
    set
    {
        _slideFrame = value;
        NotifyPropertyChanged("SlideFrame");
    }
}

// ViewModel Constructor
public Page1ViewModel()
{
    this.SlideFrame = new Slide1();
    _nextFrame = new Slide2();

    _slideChangeTimer = new DispatcherTimer();
    _slideChangeTimer.Interval = TimeSpan.FromSeconds(8);
    _slideChangeTimer.Tick += new EventHandler(SlideChange_Tick);
    _slideChangeTimer.Start();
}

// 8 second timer event handler
private void SlideChange_Tick(object sender, EventArgs e)
{
    if (currentSlide == 1)
    {
        this.SlideFrame = _nextFrame;
        _nextFrame = new Slide1(false);
        currentSlide = 2;
    }
    else
    {
        this.SlideFrame = _nextFrame;
        _nextFrame = new Slide2();
        currentSlide = 1;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-25 03:42:59

不使用框架或网页,但它展示了如何在后台获取数据,以避免在计时器中阻塞UI。如果最后一个网页还没有被获取,你应该添加等待的逻辑。

代码语言:javascript
复制
<Button Grid.Row="0" Content="AmIhot" Click="onClick" Width="60" HorizontalAlignment="Left"/>
<TextBlock Grid.Row="1" x:Name="hotText" />
<TextBlock Grid.Row="2" x:Name="revolvingText" Text="{Binding Path=RevolvingText, Mode=OneWay}" />

using System.ComponentModel;
using System.Threading;
using System.Threading.Tasks;

namespace waste09
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window, INotifyPropertyChanged
    {
        private System.Windows.Threading.DispatcherTimer _slideChangeTimer;

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
            RevolvingText = "Starting text";
            _slideChangeTimer = new System.Windows.Threading.DispatcherTimer();
            _slideChangeTimer.Interval = TimeSpan.FromSeconds(8);
            _slideChangeTimer.Tick += new EventHandler(SlideChange_Tick);
            _slideChangeTimer.Start();
        }

        // 8 second timer event handler
        private void SlideChange_Tick(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() =>
            {
                // this will NOT block the UI
                Thread.Sleep(4000);  // simulate a long fetch
                RevolvingText = "Fetched text " + Guid.NewGuid();
                NotifyPropertyChanged("RevolvingText");
            });
            RevolvingText = "Fetching data and UI not blocked ";
            NotifyPropertyChanged("RevolvingText");               
        }

        public string RevolvingText { get; private set; }

        private void onClick(object sender, RoutedEventArgs e)
        {
            hotText.Text = "Yes you are hot " + Guid.NewGuid();       
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12114919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档