Проработав некоторый пример кода, я реализовал фоновый рабочий, который добился цели. Для получения дополнительной информации Из MSDN - Как: использовать фоновый рабочий .
Я пытаюсь найти более надежный способ, чтобы приложение F11 обрабатывалось приложением, но сейчас я добавил Thread.Sleep перед SendKeys.
Пожалуйста, не стесняйтесь оставлять комментарии или вопросы.
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
Process p;
//Process p is initialized: p = Process.Start(@"<path\application.exe>");
Form2 oForm;
private void transition()
{
BackgroundWorker bw = new BackgroundWorker();
oForm = new Form2();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
oForm.Show();
if (bw.IsBusy != true)
{
bw.RunWorkerAsync();
}
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
oForm.closethis();
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
if ((worker.CancellationPending == true))
{
e.Cancel = true;
}
else
{
SetForegroundWindow(p.MainWindowHandle);
p.WaitForInputIdle(3000);
System.Threading.Thread.Sleep(500);
SendKeys.SendWait("{F11}");
//Sends the application into full screen mode
}
}
И код для формы, которая появляется и исчезает.
public partial class Form2 : Form
{
public Form2()
{
this.Visible = false;
this.Opacity = 0;
InitializeComponent();
this.TopMost = true;
this.Visible = true;
while (this.Opacity < 1)
{
this.Opacity += .05;
Thread.Sleep(5);
this.TopMost = true;
}
}
private void closefade()
{
while (this.Opacity > 0)
{
this.Opacity -= .05;
Thread.Sleep(5);
this.TopMost = true;
}
this.Close();
}
delegate void CloseBack();
public void closethis()
{
if (this.InvokeRequired)
{
CloseBack b = new CloseBack(closethis);
}
else
closefade();
}
}