PDA

View Full Version : کد refresh شدن صفحه هر n ثانیه



nbe( amateur C sharp
شنبه 25 تیر 1390, 23:28 عصر
با سلام... ببخشید من یک سوالی داشتم ، من یک صفحه دارم (web application) که داخلش یک textbox و یک checkbox دارم و میخوام هر وقت checkbox.checked = true بود این صفحه خودش هر n ثانیه refresh بشه ، که مقدار این n رو هم از text box داخل صفحه میگیرم... چه جوری باید این کار رو انجام بدم?

bozhmehrani
شنبه 25 تیر 1390, 23:49 عصر
خوب چرا یه کنترل تایمر رو صفحه ات نمیندازی . و توی اون ایونت کلیک یک Button رو فراخوانی کنی.با فعال شدن ایونت کلیک صفحه صفحه ریفرش میشه.

nbe( amateur C sharp
شنبه 25 تیر 1390, 23:59 عصر
خوب من این کار رو کردم و فراخوانی timer هم در page_Load گذاشتم ، ولی جواب نمیده و انگار timer اصلا کار نمیکنه!!!!!!!!!!!!!!!! راه دیگه ای نمیشناسید

system32
یک شنبه 26 تیر 1390, 10:01 صبح
از کامپوننت Background Worker استفاده کن

Farshid007
یک شنبه 26 تیر 1390, 10:54 صبح
خوب من این کار رو کردم و فراخوانی timer هم در page_Load گذاشتم ، ولی جواب نمیده و انگار timer اصلا کار نمیکنه!!!!!!!!!!!!!!!! راه دیگه ای نمیشناسید
مطمئنی که enabeld تایمر true هستش چون اول که تایمرو اد می کنی false هستش

Farshid007
یک شنبه 26 تیر 1390, 10:54 صبح
از کامپوننت Background Worker استفاده کن
Background Worker چیه؟ میشه یه خورده در مورد کاراییش توضیح بدی!

Legend M.A.R
یک شنبه 26 تیر 1390, 12:42 عصر
هیچ چیز خاصی نداره فکر کن یه thread مدیریت شده و حاضرو آماده داری استفاده می کنی به عنوان مثال

public void clickOnSaveButton()
{
btn_Save.PerformClick();
System.ComponentModel.BackgroundWorker g_newThread = new BackgroundWorker();
// زمانی که نخ جدید شروع به فعالیت میکنه این تابع فراخوانی می شود
g_newThread.DoWork+=new DoWorkEventHandler(g_newThread_DoWork);
g_newThread.RunWorkerCompleted +=new RunWorkerCompletedEventHandler(g_newThread_RunWork erCompleted);
///فراخوانی با پارامتر new object[]{this, new EventArgs()}
g_newThread.RunWorkerAsync("پارامتر های مورد نیاز تابعی که قرار فراخوانی بشه");
}

private void g_newThread_DoWork(object sender, DoWorkEventArgs e)
{
//در صورتی که با پارامتر صدا زده باشید
object[] parameter = e.Argument as object[];
if (parameter.Length == 0)
{
e.Cancel = true;
return;
}//end if
e.Result = true;
}

private void g_newThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//در صورتی که در تابع فراخوان نخ آن را فعالیت آن را لغو کرده باشید
if (e.Cancelled) MessageBox.Show("");
//در صورتی که در تابع فراخوانی شده خطایی رخ دهد
if (e.Error != null) MessageBox.Show(e.Error.Message);
//نتیجه خروجی از تابع فراخوانی شده
if ((Boolean)e.Result) MessageBox.Show("");
else MessageBox.Show("");
}

فقط یک نکته یادت باشه تو این جور مواقع یعنی در thread ها اگر داری یه Control رو مقدار دهی می کنی حتما باید از توابع invoke اون Control استفاده کنی وگرنه توی ویرایش خطا میگیری
با به عنوان نمونه می تونم بگم فرض کن تابع اجرای thread قرار مقدار یک lable رو عوض کنه پس داریم

private Label lab_Title = new Label();
private delegate void changeLableValue(string _NewValue);

private void ChangeLableVlaue(string _Value)
{
lab_Title.Text = _Value;
}

private void g_newThread_DoWork(object sender, DoWorkEventArgs e)
{
//در صورتی که با پارامتر صدا زده باشید
object[] parameter = e.Argument as object[];
if (parameter.Length == 0)
{
e.Cancel = true;
return;
}//end if
changeLableValue invokeChangeValue = new changeLableValue(ChangeLableVlaue);
lab_Title.Invoke(invokeChangeValue, new object[] { "Hello Body" });
e.Result = true;
}

و به عنوان نکته آخر, فکر کنم تایمر هم یک نوع thread باشه پس به شما اجازه تغییر محتوای یک Control رو نمیده مگر اینکه از invoke ها استفاده کنی (البته چون تا به حال از تایمر استفاده نکردم مطمئن نیستم)
در کل چه از تایمر چه از BackgroundWork استفاده کنی (اگر تایمر رو درست گفته باشم) در این صورت invoke الزامیه
موفق باشی

nbe( amateur C sharp
دوشنبه 27 تیر 1390, 09:49 صبح
من کد مربوط به timer رو مینیوسم از component استفاده نمیکنم و کدش هم به این صورت مینویسم :

public System.Timers.Timer myTimer = new System.Timers.Timer();
public void Timer_Send()
{
int TimeRefresh = Convert.ToInt32((txtSecrefresh.Text)) * 1000;
double TimerSend = Convert.ToDouble(TimeRefresh);
myTimer.Interval = TimerSend;
myTimer.Enabled = true;
myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed1 );
}
public void myTimer_Elapsed1(object sender, System.Timers.ElapsedEventArgs e)
{
if (CheckBox1.Checked == true)
{
x()

}
}

ولی این اصلا انگار timer کارنمیکنه، چرا؟؟؟؟؟؟؟؟؟؟؟؟؟؟

Legend M.A.R
دوشنبه 27 تیر 1390, 12:37 عصر
یه چیز دیگه این رو هم به کدت اضافه کن
Timer g_timer = new Timer();
g_timer.Enabled = true;
//این رو اضافه کن
g_timer.Start();

nbe( amateur C sharp
دوشنبه 27 تیر 1390, 22:54 عصر
ممنونم ، این رو هم امتحان میکنم، مرسی.... .

yeganehaym
سه شنبه 28 تیر 1390, 10:52 صبح
سعی کن کدت رو با جاوا بنویسی و ایجاد یه تایمر در جاوا اسکریپت که هر n ثانیه صفحه رو refresh کنه
از شی setinterval جهت ساخت استفاده کن
همیشه تا جایی که ممکنه از کد جاوا تو برنامت بهره ببر تا نیازی به برقراری با سرور جهت اجرای دستورها نباشه و مدت زمانی را وقت آن صرف کنه