Как сделать так, чтобы моя форма входа была самой популярной в отдельном потоке? - PullRequest
0 голосов
/ 25 марта 2011

В настоящее время у меня есть форма входа в систему, которая запускается в отдельном потоке при запуске основного приложения. Я попытался установить свойство TopMost в форме входа, но оно все еще не работает. Я не хочу использовать метод Application.Run, так как я имею дело с несколькими типами форм входа в систему и просто создаю интерфейс. Код ниже был упрощен:

ОБНОВЛЕНИЕ: Это было способ, которым было разработано окно входа в систему. Я не могу изменить это. Это работало в Windows XP, но не работает в Windows 7.

private void FormLoad()
{
  ParameterizedThreadStart threadStart = delegate {
                                 BeginLogin(_loginResults);
                                 };
  var thread = new Thread(threadStart);
  thread.Start();
}

private void BeginLogin(LoginResults callback)
{
  LoginData loginData = GetLoginData();

  if (callback != null)
    callback(loginData);
}

private LoginData GetLoginData()
{
  ILoginForm loginForm = LoginFormCreate();
  loginForm.TopMostDialog = true;  // This property sets the TopMost property.

  return loginForm.ShowLoginDialog();
}

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

Использование потока является причиной проблемы. Окно входа полностью отделено от главного окна, оно не отключается функцией ShowDialog (). И основной поток продолжает работать, поэтому все, что нужно сделать пользователю, это переместить окно входа в сторону, чтобы использовать главное окно.

Просто не используйте поток, вызывайте ShowDialog () напрямую.

1 голос
/ 25 марта 2011

Я думаю, вы должны использовать Pinvoke. Вы можете сделать это с помощью ShowWindow .

И это можно сделать также с помощью SetWindowLong .

Приветствие.

...