PDA

View Full Version : سوال: وقتی که برنامه Minimize می شود دیگر Normal نمی شود!



forodo
دوشنبه 30 دی 1392, 12:19 عصر
سلام
من ابتدا قطعه کد زیر رو در رویداد کلیک دکمه نوشتم که وقتی فرم من مینیمم می شد و برنامه Kmplayer هنوز اجرا بود، هنگامی که روی آیکون برنامه خودم در TaskManager کلیک می کردم صدای دینگ می داد و به حالت عادی باز نمی گشت تا وقتی که برنامه kmplayer رو می بستم.

private void radButton1_Click(object sender, EventArgs e)
{
Process p = Process.Start(@"C:\Program Files (x86)\The KMPlayer\KMPlayer.exe", @"D:\Man.Ki.Hastam.1998.HDTV.1080p_Iran-Film.mkv");
this.WindowState = FormWindowState.Minimized;
p.WaitForExit();
if (p.HasExited)
{
this.WindowState = FormWindowState.Normal;
}
}

بعد این کدها رو داخل backgroundworker گذاشتم و در رویداد کلیک دکمه بک گرویندورکر رو اجرا کردم که اروره زیر رو داد که رفعش کردم و کدام به این شکل شد.

Cross-thread operation not valid: Control 'Form1' accessed from a thread other than the thread it was created on.


private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Process p = Process.Start(@"C:\Program Files (x86)\The KMPlayer\KMPlayer.exe", @"D:\Man.Ki.Hastam.1998.HDTV.1080p_Iran-Film.mkv");
if (InvokeRequired)
{
this.Invoke(new MethodInvoker(delegate
{
this.WindowState = FormWindowState.Minimized;
p.WaitForExit();
if (p.HasExited)
{
this.WindowState = FormWindowState.Normal;
}
}));
return;
}
}

این کدای جدید رو درست متوجه نشدم چیه که اگر توضیح بدید ممنون می شم.

با این کار هم مشکل من حل نشد و وقتی که برنامه مینیمم می شه تا وقتی که برنامه kmplayer در حال اجراست نمی توانم برنامه را به حالت اول برگردانم.

با تشکر

Rezahak
دوشنبه 30 دی 1392, 13:04 عصر
سلام مشکل از p.waitforexit است تا وقتی از پروسسیس که kmplayer را اجراء کرده خارج نشوی در این نقطه منتظر می ماند. دقیقا می خوای چه کار کنی ؟ بگو شاید راه بهتری باشد

forodo
دوشنبه 30 دی 1392, 13:27 عصر
می خوام وقتی که kmplayer اجرا شد فرم مینیمم بشه و وقتی که بستمش فرمم به حالت عادی برگرده.
حالا وقتی که kmplayer در حال اجراست می خوام بتونم که روی آیکون برنامه خودم کلیک کنم و فرمم به حالت عادی برگرده.

shahryari
دوشنبه 30 دی 1392, 18:08 عصر
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Process p = Process.Start(@"C:\Program Files (x86)\The KMPlayer\KMPlayer.exe", @"D:\Man.Ki.Hastam.1998.HDTV.1080p_Iran-Film.mkv");
if (InvokeRequired)
{
this.Invoke(new MethodInvoker(delegate
{
this.WindowState = FormWindowState.Minimized;

if (p.HasExited)
{
this.WindowState = FormWindowState.Normal;
}
p.WaitForExit();
}));
return;
}
}

forodo
دوشنبه 30 دی 1392, 18:17 عصر
از اون خط if که برای بررسی بسته شدن برنامه هستش رد می شه و بعد از بستن kmplayer فرمم به حالت عادی برنمیگرده.
و مشکلم هم حل نشد.