Как выполнить метод сразу после рендеринга страницы? - PullRequest
1 голос
/ 07 марта 2012

Я пишу приложение на 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 показывается ДО того, как отобразится настоящая страница. Я бы хотел, чтобы это было наоборот, я хотел бы, чтобы страница отображалась, а затем показывал окно сообщения.

Я знаю, что мог бы использовать таймер, но кажется, что это было бы дурацким решением, так как мне пришлось бы угадывать его интервал и либо рискнуть сделать его слишком коротким, либо иначе искусственно увеличить время загрузки, установив его слишком длинный .

Ответы [ 2 ]

1 голос
/ 07 марта 2012

А как насчет события?

public partial class ThePage : Page
{
  public ThePage()
  {
     InitializeComponent();
     ContentRendered+= new RoutedEventHandler(Page_Load);
  }

  protected void Page_Load(object sender, EventArgs e)
  {
     MessageBox.Show("hey");
  }
}
0 голосов
/ 17 апреля 2014

У меня была похожая проблема, в которой я отображал окно сообщения при загрузке документа. Но окно сообщений показывалось до того, как все содержимое страницы было видно на странице, оставляя мою страницу пустой, но с отображением окна сообщений.

Я решил эту проблему, отложив выполнение окна сообщения следующим образом:

<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

Это позволяет загружать страницу (возможно, в отдельной теме?), А также отображает окно сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...