C# 从任务计划程序运行应用程序时未激活窗口

C# 从任务计划程序运行应用程序时未激活窗口,c#,winforms,focus,taskscheduler,C#,Winforms,Focus,Taskscheduler,在我的应用程序中,我试图聚焦文本框,以便在加载表单后可以直接键入内容。 当显示表单时,我可以看到文本框中的光标在闪烁,但是如果我键入了什么,什么也不会发生。 我需要单击窗口开始在文本框中输入文本。如果我在Visual Studio中正常运行我的应用程序,它会工作得很好,但是如果我的应用程序是使用任务调度器运行的,则会发生这种情况。 你有什么建议吗 下面是我的代码: this.TopMost = true; textbox.Focus(); 我还尝试了textbox.Select()但它无论如何

在我的应用程序中,我试图聚焦文本框,以便在加载表单后可以直接键入内容。
当显示
表单
时,我可以看到
文本框中的光标在闪烁
,但是如果我键入了什么,什么也不会发生。
我需要单击窗口开始在
文本框中输入文本。如果我在Visual Studio中正常运行我的应用程序,它会工作得很好,但是如果我的应用程序是使用任务调度器运行的,则会发生这种情况。
你有什么建议吗

下面是我的代码:

this.TopMost = true;
textbox.Focus();

我还尝试了
textbox.Select()但它无论如何都不起作用

问题:当应用程序通过任务调度器操作运行时,主窗口显示为非活动状态,系统通知用户在任务栏中闪烁应用程序图标。这是故意的

一个简单的解决方法是在表单设计器中设置启动窗口的
=
,然后在窗口完成加载内容并准备好显示后将其设置回
FormWindowsState.Normal
,从而引发事件

FormWindowState.Normal
设置为,并将
nCmdShow
设置为
SW\u SHOWNORMAL

激活并显示一个窗口。如果窗口最小化或 最大化后,系统会将其恢复到其原始大小和位置。 应用程序应在为显示窗口时指定此标志 第一次

该窗口现在显示为正常、活动且准备接收输入。
此外,代码使用属性显式设置应接收输入的控件

我建议在重新设置
WindowState
属性之前,使
show
处理程序
async
,并添加一个小延迟,以防止任务栏图标陷入闪烁状态

如果需要重新定位或调整窗口大小,则需要在重置
WindowState
后执行此操作,因为在此之前窗口处于最小化状态,并且不会缓存位置大小值。
表单的应设置为


当我添加
this.Activate()
时,它听起来像是你的@Crowcoder,然后任务调度程序调用我的应用程序,表单出现,但它一直在闪烁,如focus、not focus、focus等等。让调度程序运行需要用户交互的应用程序是非常不寻常的。你考虑过其他选择吗?@Crowcoder其他选择,比如什么?我希望我的应用程序在有人打开屏幕或登录后运行。好的,我想我会问。人们经常要求解决错误的问题。
private async void MainForm_Shown(object sender, EventArgs e)
{
    await Task.Delay(500);
    this.WindowState = FormWindowState.Normal;
    this.ActiveControl = [A Control to activate];
}