PDA

View Full Version : اجرا شدن دستورات یک فرم حتی در زمان minimize بودن



peyman10663
سه شنبه 21 آبان 1398, 10:08 صبح
سلام خدمت برنامه نویسان عزیز
من به یک مشکل برخوردم اونم اینه که یک برنامه نوشتم که یک فایل رو هر ده دقیقه یک بار از یک سایت به خصوص دانلود کنه و جایی ذخیره کنه تا یک برنامه دیگه از اون استفاده کنه مشکل من از این قسمت شروع می شه که وقتی برنامه دانلود فایل از حالت active خارج می شه دیگه اون فایل دانلود نمی شه و برنامه اصلی به مشکل بر می خوره و مساله اینجاست که نمی تونم این کد رو توی همون برنامه اصلی جا بدم ممنون می شم راهنماییم کنید که چجوری برنامه رو توی پس زمینه اجرا کنم تا کل این مشکلات حل شه

ASHKANLAEI
سه شنبه 21 آبان 1398, 13:38 عصر
دوست عزیز نمیدونم دقیقاً مشکل شما چیه اما از چیزی که برداشت کردم شما دو کار میتونی انجام بدی:
1. از tray icon استفاده کن که برنامه همزمان باز باشه و معلوم نباشه.
2. برنامه رو بصورت تسک در task scheduler ذخیره کن که هر چند وقت یکبار باز شه، کارشو انجام بده و بسته بشه.

peyman10663
سه شنبه 21 آبان 1398, 15:01 عصر
مرسی از وقتی که گذاشتید دوست عزیز می شه واسم این دو تا راهی رو که فرمودید توضیح بدید ممنون می شم اخه تا حالا این کارا رو انجام ندادم و بلد نیستم مرسی

ASHKANLAEI
سه شنبه 21 آبان 1398, 15:08 عصر
برای راه اول میتونید یک کنترل notify icon به فرم تون اضافه کنید و در فرمتون خاصیت showintaskbar رو false کنید.
در کد notify icon هم فرم رو نمایش بدین.

peyman10663
سه شنبه 21 آبان 1398, 16:32 عصر
برای راه اول میتونید یک کنترل notify icon به فرم تون اضافه کنید و در فرمتون خاصیت showintaskbar رو false کنید.
در کد notify icon هم فرم رو نمایش بدین.
متاسفانه این جواب کارم رو نداد و برنامه من اگر مینی مایز بشه نیمه کاره می مونه تا من دوباره برنامم رو اجرا کنم
من در عمل می خوام برنامه ام مثل خیلی از برنامه های ویندوز توی بک گراند اجرا بشه بدون نیاز به اکتیو بودن فرم برنامه

ASHKANLAEI
سه شنبه 21 آبان 1398, 16:40 عصر
از backgroundworker (https://stackoverflow.com/a/6481328/11955706)استفاده کنید.

peyman10663
سه شنبه 21 آبان 1398, 16:54 عصر
از backgroundworker (https://stackoverflow.com/a/6481328/11955706)استفاده کنید.

با عرض پوزش من چندین سال برنامه ننوشتم ممکنه بیشتر راهنمایی کنید ممنون

ASHKANLAEI
سه شنبه 21 آبان 1398, 17:47 عصر
public Form1(){
InitializeComponent();


backgroundWorker1.DoWork += backgroundWorker1_DoWork;
backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged;
backgroundWorker1.WorkerReportsProgress = true;
}


private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}


private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(1000);
backgroundWorker1.ReportProgress(i);
}
}


private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
در حلقه، 100 رو به تعداد باری که میخواین کارتون تکرار بشه تغییر بدین.
در thread.sleep، باید 1000 رو به مدت زمان فاصلۀ بین دو کد متوالی تغییر بدین (به میلی ثانیه).
و در نهایت،
progressBar1.Value = e.ProgressPercentage;
رو به کد برنامه تون تغییر بدین.

mr.sirwan
سه شنبه 21 آبان 1398, 19:33 عصر
سلام خدمت برنامه نویسان عزیز
من به یک مشکل برخوردم اونم اینه که یک برنامه نوشتم که یک فایل رو هر ده دقیقه یک بار از یک سایت به خصوص دانلود کنه و جایی ذخیره کنه تا یک برنامه دیگه از اون استفاده کنه مشکل من از این قسمت شروع می شه که وقتی برنامه دانلود فایل از حالت active خارج می شه دیگه اون فایل دانلود نمی شه و برنامه اصلی به مشکل بر می خوره و مساله اینجاست که نمی تونم این کد رو توی همون برنامه اصلی جا بدم ممنون می شم راهنماییم کنید که چجوری برنامه رو توی پس زمینه اجرا کنم تا کل این مشکلات حل شه

یعنی چی از حالت اکتیو خارج بشه دیگه کار نمیکنه، برنامه در حال اجرا هیچ فرقی نمیکنه مینیمایز باشه یا ماکسیمایز، مخفی باشه یا آشکار، در هر حالتی کار خودش رو انجام میده ربطی به اکتیو بودن نداره، شما کداتو کجا مینویسی که در حالت غیر اکتیو کار نمیکنه؟

peyman10663
سه شنبه 21 آبان 1398, 21:58 عصر
public Form1(){
InitializeComponent();


backgroundWorker1.DoWork += backgroundWorker1_DoWork;
backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged;
backgroundWorker1.WorkerReportsProgress = true;
}


private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}


private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(1000);
backgroundWorker1.ReportProgress(i);
}
}


private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
در حلقه، 100 رو به تعداد باری که میخواین کارتون تکرار بشه تغییر بدین.
در thread.sleep، باید 1000 رو به مدت زمان فاصلۀ بین دو کد متوالی تغییر بدین (به میلی ثانیه).
و در نهایت،
progressBar1.Value = e.ProgressPercentage;
رو به کد برنامه تون تغییر بدین.

ممنون از کمکتون