locked
c# cf splash screen separate thread RRS feed

  • Общие обсуждения

  • Доброго времени суток.

    Пишу приложения на c# cf 3.5 для wm 6.5 для работы с базой SQLCE.

    База весит >180мб. Первый запрос к базе выполняется приблизительно минут 10. После этого база раздувается до 220мб.

    Чтобы программа не висела это время - хочу отображать splash screen в отдельном потоке.

    Найденные примеры выполняют расчёты в отдельном потоке.

    Мне необходимо расчёты оставить в текущем, а в отдельном показывать картинку.


    25 января 2015 г. 15:59

Все ответы

  • Что по вашему при этом изменится?

    От перемены мест слагаемых...

    25 января 2015 г. 18:11
  • Не понимаю, как ваш вопрос отвечает на мой, но я ожидал подобный вопрос.

    Есть класс:

        class DBConnection
        {
            const string connectionString = @"Data Source=\My Documents\base\base.sdf;"
                                  + "Max Database Size=256;"
                                  + "Max Buffer Size=51200;";
            
            public static SqlCeConnection DBConnect()
            {
                SqlCeConnection connect = new SqlCeConnection(connectionString);
                
                try
                {
                    connect.Open();
                    return connect;
                }
                catch (SqlCeException ex)
                {
                    MessageBox.Show(ex.Message);
                    return null;
                }
            }
        }

    В запросах создаётся экземпляр класса:

    string query = "select top (1) * from tab1, tab2, tab2";
                
    SqlCeConnection connection = DBConnection.DBConnect();
    using (SqlCeCommand cmd = new SqlCeCommand(query, connection)) 
    {
        try
        {
            SqlCeDataReader reader = cmd.ExecuteReader();
            reader.Read();
        }
        catch (SqlCeException ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    

    Причём этот запрос самый первый и соединение в нем не закрывается. 

    Все последующие соединения выполняются намного быстрее, чем, если каждый раз создавать новое. 

    Поэтому запрос необходимо оставить в текущем потоке, а splash screen вынести в другой.

    После окончания запроса поток можно просто обрубать.

    26 января 2015 г. 6:40