Программа в WPF C# using.база данных mdf с LINQtoSQL немного зависает при загрузке базы данных
ОК у меня есть следующий код, который я запускаю внутри события нажатия кнопки, чтобы сравнить имя пользователя и пароль, заданные пользователем.
public static bool isAuthenticated(string Username, string Password)
{
//Open a connection with the database
using (WHDataDataContext db = new WHDataDataContext())
{
//Compare the Username and the password and return the result
return db.Users.Any(check => check.Username == Username && check.Password == Cryptographer.Encrypt(Password));
}
}
Моя проблема заключается в том, что когда я нажимаю кнопку, программа на мгновение замирает, и она отвечает.
Я использовал этот код в приложении на языке c#.sdf файл (SQL CE) и я не испытывал эту проблему.
Может ли кто-нибудь помочь?
3 ответов:
Это потому, что вы делаете блокирующее действие (например, запрос базы данных) в потоке пользовательского интерфейса. Попробуйте использовать
BackgroundWorkerusing (var worker = new BackgroundWorker()) { worker.DoWork += (theSender, theArgs) => { theArgs.Result = isAuthenticated(userName, password); }; worker.RunWorkerCompleted += (theSender, theArgs) => { bool isValid = (bool)theArgs.Result; if(!isValid) { MessageBox.Show("Not Authenticated!!"); } }; worker.RunWorkerAsync(); }
Попробуйте вместо этого использовать асинхронную задачу.
public static async Task<bool> isAuthenticated(string Username, string Password) { return await Task.Factory.StartNew<bool>(()=>{ //Open a connection with the database using (WHDataDataContext db = new WHDataDataContext()) { //Compare the Username and the password and return the result return db.Users.Any(check => check.Username == Username && check.Password == Cryptographer.Encrypt(Password)); } } }
Почему бы не создать контекст БД один раз, когда приложение запускается? Если задержка вызвана инициализацией datacontext, переместите ее туда, где запускается приложение.
Поскольку это приложение WPF, оно предположительно работает долго, поэтому нет необходимости создавать новый контекст БД для каждого извлечения базы данных.
Comments