如何在页面呈现后立即执行方法

本文关键字:执行 方法 | 更新日期: 2023-09-27 18:27:06

我正在编写一个C#应用程序,它使用Page控件来显示一些信息。以下是我想做的…

  1. 加载/导航到页面
  2. 显示实际页面
  3. 然后,在页面加载并已显示后立即执行一个方法

对于步骤1,我基本上使用

this.NavigationService.Navigate(new ThePage())

以加载页面。页面的构造函数以及我的事件处理函数是

public partial class ThePage : Page
  {
  public ThePage()
  {
    InitializeComponent();
    Loaded += new RoutedEventHandler(Page_Load);
  }
  protected void Page_Load(object sender, EventArgs e)
  {
    MessageBox.Show("hey");
  }
}

因此,在实际页面显示之前,会显示MessageBox。我想换一种方式,我想显示页面,然后显示消息框。

我知道我可以使用计时器,但感觉这将是一个糟糕的解决方案,因为我必须猜测它的间隔,要么冒着使其太短的风险,要么通过设置间隔过长来人为地增加加载时间。

如何在页面呈现后立即执行方法

内容呈现事件如何?

public partial class ThePage : Page
{
  public ThePage()
  {
     InitializeComponent();
     ContentRendered+= new RoutedEventHandler(Page_Load);
  }
  protected void Page_Load(object sender, EventArgs e)
  {
     MessageBox.Show("hey");
  }
}

我也遇到过类似的问题,在加载文档时显示了一个Messagebox。但是,在页面上所有页面内容都可见之前,Messagebox就已经显示了,我的页面为空,但显示了Messagebox。

我通过延迟执行消息框解决了这个问题,如下所示:

<Extension()> _
Public Sub MyMessageAlert(ByVal pPage As Page, ByVal pMessageText As String)
  Dim s As String = "setTimeout(function(){window.alert('" & pMessageText & "')}, 10);"
  ScriptManager.RegisterClientScriptBlock(pPage, pPage.GetType, "ClientScript", s, True)
End Sub

这允许页面加载(可能在单独的线程上?),并显示消息框。