PDA

View Full Version : سوال: اشکال در اجرای task روزانه



SardareEshgh
چهارشنبه 12 تیر 1398, 20:01 عصر
با سلام و احترام
طبق کد زیر باید روزانه task مورد نظر اجرا بشه .
ولی هیچ وقت شرط اولی اجرا نمیشه. چرا؟



interval=100;



private void timer1_Tick(object sender, EventArgs e)
{
PersianCalendar pc = new PersianCalendar();
DateTime nowTime = DateTime.Now;
DateTime scheduledTime = new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, Houre, Minute, Second, 0);


if (nowTime == scheduledTime)
{
timer1.Stop();

StartTask();

timer1.Start();

scheduledTime = scheduledTime.AddDays(1);


}


}

danialafshari
پنج شنبه 13 تیر 1398, 00:39 صبح
اگر خروجیشون رو چاپ میکردید متوجه میشید
MessageBox.Show($"nowTime: {nowTime} - scheduledTime:{scheduledTime}");
بخاطر عدم تنظیم AM/PM هست
https://stackoverflow.com/questions/41952924/set-am-or-pm-string-to-date-time-format-in-c

SardareEshgh
پنج شنبه 13 تیر 1398, 16:23 عصر
اگر خروجیشون رو چاپ میکردید متوجه میشید
MessageBox.Show($"nowTime: {nowTime} - scheduledTime:{scheduledTime}");
بخاطر عدم تنظیم AM/PM هست
https://stackoverflow.com/questions/41952924/set-am-or-pm-string-to-date-time-format-in-c

برای علامت $ خطا میده. به دات نت مربوطه؟( برای من vs2008 و دات نت 3.5 هستش.)

اجرا نشدن if فکر میکنم به خاطر میلی ثانیه هستش. چون برای تایمر interval=100 تعریف شده و شمارنده nowTime خیلی سریعتر عمل میکنه(دقیقا نمیدونم) در فاصله زمانی 100 میلی ثانیه که تایمر میخواد چک کنه میلی ثانیه nowTime از میلی ثانیه scheduledTime رد میشه به خاطر همین هیچوقت باهم برابر نمیشن . اما وقتی به شکل زیر تعریف میکنم if اجرا میشه :

if (nowTime.Day == scheduledTime.Day && nowTime.Hour == scheduledTime.Hour &&
nowTime.Minute == scheduledTime.Minute && nowTime.Second == scheduledTime.Second)

SardareEshgh
پنج شنبه 13 تیر 1398, 17:25 عصر
یه مشکل دیگه که ایجاد شده با همین روش هم که دستور if اجرا میشه برای بار دوم خطای عدم دسترسی به پوشه مقصد را میده!

زمان اجرای Task را در هر 1 دقیقه گذاشتم . بار اول درست اجرا میکنه اما بار دوم خطای عدم دسترسی به مقصد رو میده.

scheduledTime = scheduledTime.AddMinutes(1);
البته این نکته را بگم پوشه مقصد ، یه پوشه Share شده هستش ولی دسترسی ادمین داره و بصورت دستی هم باز میشه ولی نرم افزار در اجرای دوم خطا میده.

string farhangiFile = System.IO.Path.Combine(targetPath, fileName);
یه راهی که به نظرم میرسه اجرا کنم استفاده از using برای کل task هستش تا پس از اتمام using همه چیز به حالت قبلی برگرده. اما نمیدونم از using چطوری استفاده کنم.