PDA

View Full Version : سوال: تایمر(Timer) در ASP.NET



mehran63
پنج شنبه 16 شهریور 1391, 20:06 عصر
سلام
در وب من دو صفحه وجود دارد صفحه اول صفحه ای است که کاربر با آن سر و کار دارد و صفحه دوم صفحه ایست که کاربر هیچوقت به آن دسترسی ندارد
چگونه میتوانم یک تابع را در یک بازه زمانی پنج دقیقه ای اجرا کنم؟ این تابع در همان صفحه دوم قرار دارد که کاربر به آن دسترسی ندارد.

meisam12
پنج شنبه 16 شهریور 1391, 20:13 عصر
سلام
به این صورت:

namespace test
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
WebForm2 frm2=new WebForm2();
frm2.test();
}
}
}

فقط متدی که می خواهید استفاده کنید باید public باشد. یعنی متد test() باید به صورت public تعریف شود مثل زیر:

namespace test
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
public void test()
{


}
}
}

mehran63
پنج شنبه 16 شهریور 1391, 20:27 عصر
متشکر ولی تنظیم timer چی میشه؟ با این کاری شما کردید فقط یک بار در page_load متد فراخوانی میشود.
در ضمن صفحه دوم در یک پوشه به اسم myFolder قرار دارد. با این حالت کد بالا چه تغییری میکند

meisam12
پنج شنبه 16 شهریور 1391, 20:32 عصر
منظورتان این است که هر 5 دقیقه یک بار اجرا شود و یا نه یک بازه زمانی شما تعیین کنید؟

mehran63
پنج شنبه 16 شهریور 1391, 20:40 عصر
بله هر پنج دقیقه یک بار اجرا شود
در ضمن این موضوع هیچ ربطی به کاربر ندارد. یعنی وقتی سایت رو روی هاست گذاشتم این تابع هر 5 دقیقه باید اجرا بشه

mehran63
جمعه 17 شهریور 1391, 18:39 عصر
کسی جواب نداره

tooraj_azizi_1035
جمعه 17 شهریور 1391, 20:07 عصر
sing System;
using System.Threading;

// Simple threading scenario: Start a static method running
// on a second thread.
public class ThreadExample {
// The ThreadProc method is called when the thread starts.
// It loops ten times, writing to the console and yielding
// the rest of its time slice each time, and then ends.
public static void ThreadProc() {
while(condition)
{
Do your job;
// Yield the rest of the time slice.
Thread.Sleep(5000);

}
}
}

public static void Main() {
Console.WriteLine("Main thread: Start a second thread.");
// The constructor for the Thread class requires a ThreadStart
// delegate that represents the method to be executed on the
// thread. C# simplifies the creation of this delegate.
Thread t = new Thread(new ThreadStart(ThreadProc));

// Start ThreadProc. Note that on a uniprocessor, the new
// thread does not get any processor time until the main thread
// is preempted or yields. Uncomment the Thread.Sleep that
// follows t.Start() to see the difference.
t.Start();

}
}

تو این برنامه ThreadProc کار مورد نظر هست. condition شرط خروج هست و Sleep باعث میشه بعد از 5 ثانیه توقف کار دوباره ادا مه پیدا کنه.

mehran63
جمعه 17 شهریور 1391, 20:40 عصر
1- به جای ThreadProc چطور بگم که متد با اسم Add() از صفحه مثلا با اسم page2 که در پوشه مثلا با اسم NewFolder قرار دارد را فراخوانی کن. البته اگه درست متوجه شده باشم کد بالا رو باید در page2 بنویسم و نیازی به سوال 1 نیست؟
2- من دقیقا متوجه کدهای بالا نشدم، فرض رو بر این بزارید که اسم متدی که میخوام هر 5 دقیقه یک بار اجرا بشه Add() باشه.
3- و آیا باید حتما تابعی به اسم main() بزارم یا هر اسمی باشه اشکال نداره ( قراره یک صفحه وب باشه روی هاست. aplication نیست.) و pageLoad هم احتمالا نباید مشکل رو حل کنه چون قرار نیست اصلا کاربر این صفحه رو Load کنه.
در ضمن شرطی برای خروج وجود ندارد و هر 5 دقیقه اون تابع باید فراخوانی بشه

tooraj_azizi_1035
شنبه 18 شهریور 1391, 09:11 صبح
شما در صفحه دوم در جایی که باید عملیات رو اجرا کنی باید یک نخ جدید ایجاد کنی بعد به جای ThreadProc باید Add رو بذاری. در ضمن شرط خروج رو باید به جای condition یا در بدنه while بگذارید. با while که آشنا هستید.

mehran63
شنبه 18 شهریور 1391, 11:37 صبح
متشکر از پاسخ گویی شما
ولی من واقعا سر در نمیارم چی میگین، مثلا میگین جایی که باید عملیات رو اجرا کنید در حالی که هیچ جای خاصی وجود ندارد
خیلی ساده و واضح بگم یک متد به اسم Add در صفحه دوم وجود دارد که این باید هر پنج دقیقه یک بار اجرا شود. تنها یک موضوع شاید لازم به توضیح دارد آن هم این که این صفحه هیچ وقت توسط بازدید کننده از سایت load نمیشود. همچنین این صفحه در یک پوشه به اسم myFolder قرار دارد.
هیچ شرطی هم نباید وجود داشته باشد که از این حالت خارج شود، بلکه مادام العمر این کار باید انجام گیرد (هر پنج دقیقه اجرا شدن)
شما در سورس بالا اجرا را در Main گذاشتید در صورتی که برنامه من یک وب است. اگر یک بار دیگه با توضیحاتی که دادم و اسامی که گفتم سورس رو بذارید ممنون میشم.

mehran63
یک شنبه 19 شهریور 1391, 12:22 عصر
کسی راه حل نداره