Отображать сообщение о загрузке до полного извлечения данных SQL

Я пользуюсь костюмным костюмом WeifenLuo.

Мне нужно показать какую-то всплывающую форму или сообщение о загрузке, прежде чем SQL завершит загрузку данных.

То, что я пробовал, не сработало

  public partial class frmPostventa : DockContent
    {
       private void frmPostventa_Load(object sender, EventArgs e)
        {   

            bool done = false;
            ThreadPool.QueueUserWorkItem((x) =>
            {
                using (var splashForm = new SplashForm())
                {
                    splashForm.Show();
                while (!done)
                    Application.DoEvents();
                splashForm.Close();
            }
        });
        //Database task heavy load
        cargarDatos();
        done = true;

    }

    public void cargarDatos()
    {

        string strSQL = "exec SAI_ALGO.spPostventa";

        SqlDataAdapter dataAdapter = new SqlDataAdapter(strSQL, strCon);
        SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);

        // Populate a new data table and bind it to the BindingSource.
        DataTable table = new DataTable();
        table.Locale = System.Globalization.CultureInfo.InvariantCulture;
        dataAdapter.Fill(table);
        bindingSource1.DataSource = table;

    }


}

РЕДАКТИРОВАТЬ: Добавлено CargarDatos()

1 ответ

Решение

DoEvents() почти всегда приводит к очень плохому месту, и его следует всегда избегать. Проблема с этой конкретной реализацией в том, что ваш длительный процесс (cargarDatos()) будет блокировать поток пользовательского интерфейса до его завершения, поэтому DoEvents() не будет иметь никакого эффекта; он не будет прерывать метод во время его выполнения (при условии cargarDatos() не делает что-то внутренне, что приведет к потоку). Кроме того, создание и взаимодействие с элементом управления UI из некоторого фонового потока здесь недопустимо.

Вы должны использовать BackgroundWorker чтобы выполнить длительную операцию и повысить статус обновления пользовательского интерфейса: http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

Другие вопросы по тегам