2014-04-01 62 views
0

我的代码只是读取文件,将其拆分为单词,并以0.1秒的频率向文本框中的每个单词发送。通过文本框显示文本文件中的文字?

我点击"button1"来获取文件和分割。

当我点击Start_Button后程序卡住了。我在代码中看不到任何问题。任何人都可以看到它吗?

我的代码在这里;

public partial class Form1 : Form 
    { 
     string text1, WordToShow; 
     string[] WordsOfFile; 
     bool LoopCheck; 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     {   
      OpenFileDialog BrowseFile1 = new OpenFileDialog(); 
      BrowseFile1.Title = "Select a text file"; 
      BrowseFile1.Filter = "Text File |*.txt"; 
      BrowseFile1.FilterIndex = 1; 
      string ContainingFolder = AppDomain.CurrentDomain.BaseDirectory; 
      BrowseFile1.InitialDirectory = @ContainingFolder; 
      //BrowseFile1.InitialDirectory = @"C:\"; 
      BrowseFile1.RestoreDirectory = true; 
      if (BrowseFile1.ShowDialog() == DialogResult.OK) 
      { 
       text1 = System.IO.File.ReadAllText(BrowseFile1.FileName); 
       WordsOfFile = text1.Split(' '); 
       textBox1.Text = text1; 
      } 
     } 

     private void Start_Button_Click(object sender, EventArgs e) 
     { 
      timer1.Interval = 100; 
      timer1.Enabled = true; 
      timer1.Start(); 
      LoopCheck = true; 
      try 
      { 
       while (LoopCheck) 
       { 
        foreach (string word in WordsOfFile) 
        { 
         WordToShow = word; 
         Thread.Sleep(1000); 
        } 
       } 
      } 
      catch 
      { 
       Form2 ErrorPopup = new Form2(); 
       if (ErrorPopup.ShowDialog() == DialogResult.OK) 
       { 
        ErrorPopup.Dispose(); 
       } 
      } 

     } 

     private void Stop_Button_Click(object sender, EventArgs e) 
     { 
      LoopCheck = false; 
      timer1.Stop(); 
     } 

     private void timer1_Tick(object sender, EventArgs e) 
     { 
      textBox1.Text = WordToShow; 
     } 
    } 
} 

回答

0

代替Thread.Sleep(1000);使用async/await功能与Task.Delay为了保持你的UI负责:

private async void Start_Button_Click(object sender, EventArgs e) 
    { 
     timer1.Interval = 100; 
     timer1.Enabled = true; 
     timer1.Start(); 
     LoopCheck = true; 
     try 
     { 
      while (LoopCheck) 
      { 
       foreach (string word in WordsOfFile) 
       { 
        WordToShow = word; 
        await Task.Delay(1000); 
       } 
      } 
     } 
     catch 
     { 
      Form2 ErrorPopup = new Form2(); 
      if (ErrorPopup.ShowDialog() == DialogResult.OK) 
      { 
       ErrorPopup.Dispose(); 
      } 
     } 

    } 
+0

这解决了这个问题。谢谢。但我不明白为什么有一个Thread.Sleep()方法,当我们有更可靠的这样的? – Zgrkpnr