В моем приложении пользователь может изменить соединение с базой данных из пользовательского интерфейса. Я использую этот код для быстрой проверки соединения с новыми данными соединения: свойство
public bool CheckAvailable(string sqlServerName, string login, string password)
{
var testConnectionString = GetConnectionString(sqlServerName, login, password);
if (string.IsNullOrWhiteSpace(testConnectionString))
return false;
var result = false;
try
{
var testContext = new EntityContext(testConnectionString);
result = testContext.Database.Exists();
}
catch (Exception ex)
{
log.Error(exception);
}
return result;
}
private string GetConnectionString(string sqlServerName, string login, string password)
{
var sqlConnectionString = new SqlConnectionStringBuilder
{
DataSource = sqlServerName,
InitialCatalog = ConfigurationProvider.DatabaseName,
UserID = login,
Password = password,
MultipleActiveResultSets = true,
ConnectTimeout = 2 // in seconds
};
var efConnectionString = new EntityConnectionStringBuilder
{
Provider = ProviderName,
Metadata = ConnectionMetadata,
ProviderConnectionString = sqlConnectionString.ToString()
};
return efConnectionString.ConnectionString;
}
ConnectTimeout типа SqlConnectionStringBuilder очень важно для быстрой проверки молнии. Если вы знаете, что ваша база данных должна быть доступна и должна быстро реагировать, вы можете установить это значение равным 1 (при установленном локальном сервере SQL проверка занимает 100-200 миллисекунд). Не устанавливайте 0, потому что это означает отсутствие ограничений и их следует избегать в строках соединения.
Если установить RoutedEvent
e.Handled
на true
после обработки MouseDoubleClick
тогда оно не будет вызывать событие Click
второй раз после MouseDoubleClick
.
Есть недавнее сообщение , в котором говорится о различном поведении для ] SingleClick
и DoubleClick
, которые могут быть полезны.
Однако, если вы уверены, что хотите отдельные варианты поведения и хотите / должны заблокировать первый Нажмите
, а также второй Щелкните
, вы можете использовать DispatcherTimer
, как и вы.
private static DispatcherTimer myClickWaitTimer =
new DispatcherTimer(
new TimeSpan(0, 0, 0, 1),
DispatcherPriority.Background,
mouseWaitTimer_Tick,
Dispatcher.CurrentDispatcher);
private void Button_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
// Stop the timer from ticking.
myClickWaitTimer.Stop();
Trace.WriteLine("Double Click");
e.Handled = true;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
myClickWaitTimer.Start();
}
private static void mouseWaitTimer_Tick(object sender, EventArgs e)
{
myClickWaitTimer.Stop();
// Handle Single Click Actions
Trace.WriteLine("Single Click");
}
Вы можете попробовать следующее:
Button.MouseLeftButtonDown += Button_MouseLeftButtonDown;
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
if (e.ClickCount > 1)
{
// Do double-click code
}
else
{
// Do single-click code
}
}
При необходимости вы можете потребовать щелкнуть мышью и дождаться, пока мышь не поднимется, чтобы выполнить действие.