2013-06-01 3 views
0

Я хочу создать метод, который заставляет мое приложение ждать X секунд, а затем продолжает линию строк. Например, это код, который я до сих пор, после прочтения многих подобных разделов справки:Как создать метод «Сон» для моего приложения

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
     { 
     public Form1() 
     { 
      InitializeComponent(); 

      methods.WriteTextToScreen(label1, "Hello!"); 
      methods.sleepFor(1); 
      methods.WriteTextToScreen(label1, "Welcome!"); 
      methods.sleepFor(1); 
      methods.WriteTextToScreen(label1, "Allo!"); 
     } 

     public class methods 
     { 
      public static int timeSlept; 

      public static void WriteTextToScreen(Label LabelName, string text) 
      { 

       LabelName.Text = text; 
      } 


      public static void sleepFor(int seconds) 
      { 
       timeSlept = 0; 

       System.Timers.Timer newTimer = new System.Timers.Timer(); 
       newTimer.Interval = 1000; 
       newTimer.AutoReset = true; 

       newTimer.Elapsed += new  System.Timers.ElapsedEventHandler(newTimer_Elapsed); 

      newTimer.Start(); 

      while (timeSlept < seconds) 
      { 
       Application.DoEvents(); 
      } 

      Application.DoEvents(); 

     } 

     public static void newTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
     { 
      timeSlept = IncreaseTimerValues(ref timeSlept); 
      Application.DoEvents(); 
     } 

     public static int IncreaseTimerValues(ref int x) 
     { 
      int returnThis = x + 1; 
      return returnThis; 
     } 

    } 

} 
} 

То, что я хочу сделать, это моя программа делать в methods.WriteTextToScreen (Label1, «Привет!») затем подождите 1 секунду, затем продолжайте то же самое. Проблема в том, что форма, в которой я показываю текст, не появляется вообще, пока она не написала «Allo!» на экране, поэтому в первый раз, когда он появляется, это уже говорит об этом. Я что-то делаю неправильно, или просто нет способа сделать это?

+1

О, бог, а не применение.DoEvents(). Он просто не умрет! – ose

+0

Фактически этот [Таймер] (http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx) ref является более актуальным. Также вам не нужно вводить языки в свои заголовки, для чего нужны теги. – ChiefTwoPencils

ответ

0

Форма не отображается, пока она не была построена, то есть весь код в Form1 запущен. См. Здесь информацию о конструкторах форм: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.form.aspx

Чтобы устранить проблему, вы можете переместить файл writeTextToScreen и код сна в формы на методе загрузки. См. http://msdn.microsoft.com/en-us/library/system.windows.forms.form.onload.aspx

+0

Так что мне нужно переопределить метод OnLoad, правильно? Я пытался это сделать, но где мне нужно поставить этот метод, чтобы форма распознала, что она была изменена? – ApachePilotMPE

+0

Помогает ли это? http://stackoverflow.com/questions/9847376/how-to-add-a-form-load-event-current-not-working – Anna

+0

Сообщение, которое вы мне дали, было полезно, я понял, что мне нужно использовать Form1. Показывается событие вместо Form1.Load, чтобы убедиться, что форма отображается до того, как я начал делать вещи. Теперь он отлично работает, спасибо за помощь! – ApachePilotMPE

Смежные вопросы