1

X レコードを含む Excel ファイルから読み取った c# のデータセットをループしています。テスト目的で、Thread.Sleep() を使用して、各レコードが読み取られた後、出力を 1 秒間一時停止しました。私の理解では、ループを書いた方法で、1 秒間一時停止してから 1 行の出力 (1 レコード) を表示し、1 秒間一時停止し、1 行を表示する必要があるということでした。ただし、コードを実行すると、 X 秒間の一時停止の後、すべてのレコードがすぐに画面に出力されます。なぜこれが起こっているのか知っている人はいますか?ブレークポイントを挿入してステップスルーしたところ、すべて正常に動作しているようです (エラーなどはありません)。これが基本的な質問である場合は申し訳ありませんが、私は少し緑のプログラマーです。

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;
                }                    
            }
        }
    } 
4

1 に答える 1

3

このメソッドはメイン スレッド (UI のスレッド) で実行しているため、スレッドはイベント (表示の更新など) を処理できません。

UI メッセージを処理するには、これと同様のことを行うことができます: https://stackoverflow.com/a/3121934/38368

または、さらに良いのは、コードを再設計することです。たとえば、別のスレッドを使用します。例https://stackoverflow.com/a/1216799/38368

于 2013-01-21T17:23:39.503 に答える