
Если я хочу сделать frmLogin
без потери фокуса, когда я нажимаю в любом месте в frmLockScreen
.
Эти две формы используют topmost = true
и форму вызова frmMainClient
.
showDialog
не очень хороший ответ для меня, потому что он блокирует другие потоки, но мне просто не нужно терять фокус.
Я объясню почему.
Я использую SCS Framework для создания своей программы интернет-кафе
Это то, что сервер называется
public void LockScreen()
{
var client = CurrentClient;
client.ClientProxy.LockScreen();
}
Это то, что клиент предоставляет серверу
public void LockScreen()
{
_main.clearAndLockScreen();
}
Если я использую showDialog
, то при запуске он застревает в строке ShowDialog () и не может отправить ответное сообщение обратно на сервер, поскольку он не выполняет эту функцию. Затем сервер поймает исключение, которое не получит ответа от клиента после истечения времени ожидания.
public void clearAndLockScreen()
{
startTimeTextBox.InvokeIfRequired(s => { s.ResetText(); });
costTextBox.InvokeIfRequired(s => { s.ResetText(); });
memberIdLabel.InvokeIfRequired(s=>{ s.ResetText();});
_currentElapsedTimeDisplay.InvokeIfRequired(s =>
{
timerManager.reset();
s.ResetText();
});
expDateTB.InvokeIfRequired(s => { s.ResetText(); });
remainTB.InvokeIfRequired(s => { s.ResetText(); });
lockScreen.InvokeIfRequired(s =>
{
lockScreen = new LockScreen(this);
lockScreen.Show();
});
loginForm.InvokeIfRequired(s =>
{
loginForm = new LoginForm(this);
loginForm.ShowDialog();
});
process.MoveNext(Command.Logout);
}
Есть идеи?