Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使我的登录表单在单独的线程中处于最顶端?_C#_Winforms_Multithreading_Topmost - Fatal编程技术网

C# 如何使我的登录表单在单独的线程中处于最顶端?

C# 如何使我的登录表单在单独的线程中处于最顶端?,c#,winforms,multithreading,topmost,C#,Winforms,Multithreading,Topmost,我目前有一个登录表单,当主应用程序启动时,它在一个单独的线程中启动。我尝试在登录表单上设置最顶层的属性,但仍然不起作用。我不想使用Application.Run方法,因为我正在处理几种类型的登录表单,我只是创建了一个接口。以下代码已简化: 更新:这是登录窗口的设计方式。我不能改变这个。这在Windows XP中起作用,但在Windows 7中不起作用。 private void FormLoad() { ParameterizedThreadStart threadStart = deleg

我目前有一个登录表单,当主应用程序启动时,它在一个单独的线程中启动。我尝试在登录表单上设置最顶层的属性,但仍然不起作用。我不想使用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();
}

使用线程是问题的原因。登录窗口与主窗口完全分离,它不会被ShowDialog()禁用。并且主线程一直在运行,因此用户所要做的就是将登录窗口移到一边以使用主窗口


不要使用线程,直接调用ShowDialog()。

使用线程是问题的原因。登录窗口与主窗口完全分离,它不会被ShowDialog()禁用。并且主线程一直在运行,因此用户所要做的就是将登录窗口移到一边以使用主窗口


不要使用线程,直接调用ShowDialog()。

我想你应该使用Pinvoke。你可以用它来做

这也可以用


干杯。

我想你应该用Pinvoke。你可以用它来做

这也可以用


干杯。

为什么您首先要在不同的线程上运行登录表单?登录过程需要一段时间。我们不希望阻止用户在不需要登录的应用程序的其他区域进行工作。为什么要首先在其他线程上运行登录表单?登录过程需要一段时间。我们不想阻止用户在不需要登录的应用程序的其他区域进行工作。这是登录窗口的设计方式。我不能改变这个。这在Windows XP中起作用,但在Windows 7中不起作用。这是一个程序员网站。我们改变事情。查找有关Win7兼容性问题的帮助的最佳位置是superuser.com这是登录窗口的设计方式。我不能改变这个。这在Windows XP中起作用,但在Windows 7中不起作用。这是一个程序员网站。我们改变事情。查找有关Win7兼容性问题的帮助的最佳位置是superuser.com。谢谢。SetWindowLong似乎大部分时间都在工作。我现在正在玩这个。谢谢你。SetWindowLong似乎大部分时间都在工作。我现在正在玩这个。