Window 当应用程序 运行 来自 Task Scheduler 时未激活
Window not activated when the application is run from Task Scheduler
在我的应用程序中,我试图聚焦一个文本框,以便我可以在加载表单后立即输入。
当显示 Form
时,我可以看到 TextBox
中的光标在闪烁,但如果我输入一些内容,什么也不会发生。
我需要单击 Window 开始在 TextBox
中输入文本。如果我 运行 我的应用程序通常来自 Visual Studio,它将完美运行,但如果我的应用程序 运行 使用任务计划程序,则会发生这种情况。
你有什么建议吗?
下面是我的代码:
this.TopMost = true;
textbox.Focus();
我也试过textbox.Select();
,但还是不行。
问题:当任务计划程序操作 运行 应用程序时,主 Window 显示为非活动状态,系统通知用户在任务栏中闪烁应用程序的图标。这是设计。
一个简单的解决方法是设置启动 Window 的 WindowState
=
FormWindowState.Minimized
in the Form Designer, then set it back to FormWindowState.Normal
after the Window has completed loading its content and it's ready to be presented, raising the Shown 事件。
设置 FormWindowState.Normal
causes a call to ShowWindow,nCmdShow
设置为 SW_SHOWNORMAL
:
Activates and displays a window. If the window is minimized or
maximized, the system restores it to its original size and position.
An application should specify this flag when displaying the window for
the first time.
Window 现在显示如常,处于活动状态并准备好接收输入。
此外,代码使用 ActiveControl 属性 显式设置应接收输入的控件。
我建议制作 Shown
处理程序 async
并在重新设置 WindowState
属性 之前添加一个小的延迟,以防止任务栏图标变得卡在闪烁状态。
如果 Window 需要重新定位或调整大小,这需要在 WindowState
重置后完成,因为 Window 在此之前处于最小化状态并且不会缓存位置和尺寸值。
表单的 StartPosition should be set to FormStartPosition.Manual
private async void MainForm_Shown(object sender, EventArgs e)
{
await Task.Delay(500);
this.WindowState = FormWindowState.Normal;
this.ActiveControl = [A Control to activate];
}
在我的应用程序中,我试图聚焦一个文本框,以便我可以在加载表单后立即输入。
当显示 Form
时,我可以看到 TextBox
中的光标在闪烁,但如果我输入一些内容,什么也不会发生。
我需要单击 Window 开始在 TextBox
中输入文本。如果我 运行 我的应用程序通常来自 Visual Studio,它将完美运行,但如果我的应用程序 运行 使用任务计划程序,则会发生这种情况。
你有什么建议吗?
下面是我的代码:
this.TopMost = true;
textbox.Focus();
我也试过textbox.Select();
,但还是不行。
问题:当任务计划程序操作 运行 应用程序时,主 Window 显示为非活动状态,系统通知用户在任务栏中闪烁应用程序的图标。这是设计。
一个简单的解决方法是设置启动 Window 的 WindowState
=
FormWindowState.Minimized
in the Form Designer, then set it back to FormWindowState.Normal
after the Window has completed loading its content and it's ready to be presented, raising the Shown 事件。
设置 FormWindowState.Normal
causes a call to ShowWindow,nCmdShow
设置为 SW_SHOWNORMAL
:
Activates and displays a window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when displaying the window for the first time.
Window 现在显示如常,处于活动状态并准备好接收输入。
此外,代码使用 ActiveControl 属性 显式设置应接收输入的控件。
我建议制作 Shown
处理程序 async
并在重新设置 WindowState
属性 之前添加一个小的延迟,以防止任务栏图标变得卡在闪烁状态。
如果 Window 需要重新定位或调整大小,这需要在 WindowState
重置后完成,因为 Window 在此之前处于最小化状态并且不会缓存位置和尺寸值。
表单的 StartPosition should be set to FormStartPosition.Manual
private async void MainForm_Shown(object sender, EventArgs e)
{
await Task.Delay(500);
this.WindowState = FormWindowState.Normal;
this.ActiveControl = [A Control to activate];
}