PDA

View Full Version : سوال: چک کردن برنامه برای رسیدن به روز و ساعت ذخیره شده



دلتنگ اسمان
سه شنبه 25 خرداد 1395, 12:36 عصر
با سلام
توسط فرمی ایام هفته و ساعتی را که کاربر تنظیم میکند دریافت و ذخیره میکنم.
حالا میخوام برنامه وقتی به اون روز و ساعت ذخیره شده رسید کاری رو انجام بده.
با تشکر

دلتنگ اسمان
چهارشنبه 26 خرداد 1395, 10:24 صبح
با سلام
لطفا یکی راهنمایی کنه واقعا نمیدونم چطوری بنویسم. توی لود فرم اصلی باید بنویسم یا توی تایمر.
این هم کدهای عجیب و غریب که تاحالا نوشتم

timer1.Enabled = true;
timer2.Enabled = true;

con = new SqlConnection();
com = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
DataTable dtbl = new DataTable();
com.Connection = con;
com.CommandText = "select * from backuptbl where id=1";
con.ConnectionString = ConnectionString;
da.SelectCommand = com;
con.Open();
da.Fill(dtbl);

foreach (DataRow arow in dtbl.Rows)
{
timeb = arow["timeBackup"].ToString().Trim();
day = (bool)arow["Daily"];
week = (bool)arow["Weekly"];
month = (bool)arow["monthly"];
daymonth = arow["daymonth"].ToString();
sat = (bool)arow["Saturday"];
sun = (bool)arow["sunday"];
mon = (bool)arow["Monday"];
tus = (bool)arow["Tuesday"];
wen = (bool)arow["Wendnesday"];
thur = (bool)arow["thursday"];
fri = (bool)arow["Friday"];
}

if (timeb != "")
{
dth = timeb.Substring(0, 2);
dtm = timeb.Substring(3, 2);

int timeH = date_time.Hour;
int timeM = date_time.Minute;
int timeS = date_time.Second;

TimeSpan t1 = new TimeSpan(0, 23, 0, 0);
TimeSpan t2 = new TimeSpan(1, 1, 30, 0);

TimeSpan t3 = t2 - t1;

DateTime dtBack = new DateTime(date_time.Year, date_time.Month, date_time.Day, timeH, timeM, timeS);
TimeSpan ts = date_time - dtBack;

System.DateTime today1 = new System.DateTime(System.DateTime.Today.Ticks);
System.DateTime today2 = new System.DateTime(System.DateTime.Today.Ticks);
System.DateTime tomorrow = new System.DateTime(System.DateTime.Today.AddDays(1).T icks);
// todayEqualsToday gets true.
bool todayEqualsToday = System.DateTime.Equals(today1, today2);
// todayEqualsTomorrow gets false.
bool todayEqualsTomorrow = System.DateTime.Equals(today1, tomorrow);
}

RamezanBeik
چهارشنبه 26 خرداد 1395, 11:05 صبح
سلام می تونید از یه Thread برای چک کردن استفاده کنید.
اگه در ست فهمیدم روز و ساعت و کاری که می خواد انجام بشه توسط یه فرم دریافت مشه و حتما یه جا ذخیره
خوب فقط کافی هستش که تاریخ، روز ساعت یا هرچیز دیگری که در ین امر دخیل هستش توسط یه Thread کنترل بشه تا در صورت بر قرار بودن شرط کار مورد نظر هم انجام بشه.
البته بهترین راهکار نخواهد بود ولی یه ایده هستش

دلتنگ اسمان
چهارشنبه 26 خرداد 1395, 11:28 صبح
سلام می تونید از یه Thread برای چک کردن استفاده کنید.
اگه در ست فهمیدم روز و ساعت و کاری که می خواد انجام بشه توسط یه فرم دریافت مشه و حتما یه جا ذخیره
خوب فقط کافی هستش که تاریخ، روز ساعت یا هرچیز دیگری که در ین امر دخیل هستش توسط یه Thread کنترل بشه تا در صورت بر قرار بودن شرط کار مورد نظر هم انجام بشه.
البته بهترین راهکار نخواهد بود ولی یه ایده هستش
بله درسته همونطور که در پست اول گفتم زمان و ساعت دریافت و ذخیره میشه. مشکل من این که نمیدونم چطوری تاریخ و ساعت الان رو با تاریخ و ساعت ذخیره شده مقایسه کنم تا ببینم به تاریخ مورد نظر رسیدم یا نه.(چون تاریخ بصورت روزهای هفته ذخیره شده)
نمیدونم منظورم رو تونستم برسونم یا نه؟

RamezanBeik
چهارشنبه 26 خرداد 1395, 11:52 صبح
اگر منظور شما مقاسه دو تاریخ هستش خوب از متد CompareTo استفاده کنید
این سایت هم یه سر بزنید
http://stackoverflow.com/questions/22564846/c-sharp-compare-two-datetimes

دلتنگ اسمان
چهارشنبه 26 خرداد 1395, 12:01 عصر
ممنون از توجهتون
اما به اینصورت نیست.
ببین فرض کنید قراره هر هفته شنبه ها و سه شنبه ها راس ساعت 13:00 از اطلاعات به صورت اتوماتیک بکاپ گرفته شود.
امروز چهارشنبه است. برنامه چطوری باید بفهمه که به روز شنبه و ساعت 13:00 رسیده یا نه ؟

hamid_hr
چهارشنبه 26 خرداد 1395, 12:32 عصر
شما میتونی یه ترد ایجاد کنی و تو اون هر مثلا یک دقیقه چک کنی که الان باید کاری انجام بده یا نه . ساعت سیستمو با ساعت کارهای داخل دیتابیس مقایسه کنی و اگه قراره کاری شروع بشه انجامش بدی. این راه یک ترد در حال اجرا برای همیشه بهتون تحمیل میکنه و هر یک دقیقه هم دیتابیسو مشغول میکنه
راه دیگه اینه که وقتی سیستم شروع به کار کرد همه کارهای امروزو از دیتابیس بگیری و توی یک لیست به ترتیب زمانی بچینی.
بعد بیای بازم هر یک دقیقه چک کنی ببینی به زمان اولین کار تو لیست رسیده یا نه انجامش دادی بری برا کار دوم این روش این روش یه حلقه همیشه فعال در سیستم داره ولی دیگه هر یک دقیقه یک بار به دیتابیس مراجعه نمیکنه.

ژیار رحیمی
چهارشنبه 26 خرداد 1395, 14:07 عصر
سلام از طریق nuget پکیجASquare.WindowsTaskScheduler نصب کن
https://www.nuget.org/packages/ASquare.WindowsTaskScheduler/
نحوه کد نویسی


SchedulerResponse response = WindowTaskScheduler.Configure().CreateTask("TaskName", "C:\\Test.bat")
.RunDaily()
.RunEveryXMinutes(10)
.RunDurationFor(new TimeSpan(18, 0, 0))
.SetStartDate(new DateTime(2015, 8, 8))
.SetStartTime(new TimeSpan(8, 0, 0))
.Execute();