Winforms:循环期间刷新

问题描述:

我正在循环访问c#中的数据集,从包含X记录的Excel文件中读取。出于测试目的,我在每次读取记录后使用Thread.Sleep()暂停输出。我的理解是,他们的方式,我写我的循环,它应该暂停1秒,然后显示1行输出(1记录),暂停1秒,显示1行,等等......但是,当我执行代码时,我得到一个X秒的长暂停,然后立即将所有记录输出到屏幕。任何人都知道这是为什么发生?我插入了一个断点,并通过它,一切似乎工作正常(没有错误或任何东西)。对不起,如果这是一个基本的问题,但我是一个绿色的程序员。Winforms:循环期间刷新

private void ReadExcelFile() 
    { 
     string fileAndPath = fileTextBox.Text; 
     string fileName = Path.GetFileName(fileAndPath); 
     string directoryPath = Path.GetDirectoryName(fileAndPath); 

     var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileAndPath + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\""; ; 
     using (var conn = new OleDbConnection(connectionString)) 
     { 
      conn.Open(); 

      var sheets = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 
      using (var cmd = conn.CreateCommand()) 
      { 
       cmd.CommandText = "SELECT * FROM [" + sheets.Rows[0]["TABLE_NAME"].ToString() + "] "; 

       var adapter = new OleDbDataAdapter(cmd); 
       var ds = new DataSet(); 
       adapter.Fill(ds); 

       foreach (DataRow row in ds.Tables[0].Rows) 
       { 
        user = row.ItemArray[0].ToString(); 
        email = row.ItemArray[1].ToString(); 
        password = row.ItemArray[2].ToString(); 
        Thread.Sleep(1000);     

        excelTextBox.Text += user + "  " + email + "  " + password + "  " + Environment.NewLine; 
       }      
      } 
     } 
    } 
+0

考虑使用'\ t'而不是“”(多个空格)。 –

既然你正在运行的主线程(UI的线程)这种方法,线程是无法处理事件(例如显示更新)。

你可以做一些类似的处理UI消息: https://*.com/a/3121934/38368

或者,更好的是,重新设计你的代码。例如。使用一个单独的线程。例如。 https://*.com/a/1216799/38368

+0

我将不会在我的实时应用程序中使用线程,但您的建议仍然与我想要的一样。谢谢! – ovaltein