C# 计时器控件在ASP.net中不工作
我有这样的情况C# 计时器控件在ASP.net中不工作,c#,.net,asp.net,multithreading,timer,C#,.net,Asp.net,Multithreading,Timer,我有这样的情况 TestClass—在UI层中定义的类 test-类级别变量 Submit按钮调用函数DoSomeThing()。它在业务层执行某些操作,并不断更新类的Status属性 Timercontrol获取要在UI中显示的状态(来自同一变量测试) Submit按钮由一个线程运行(比如线程1)并启动操作。是从BL更新status属性的线程 Timer控件每次创建一个新线程来运行TimerEvent(比如线程2、3等) 这里的问题是由thread1更新的test.Status属性不能被其他线
公共类TestClass/--->#1
{
私有测试=新测试();/--->#2
受保护的无效提交按钮单击(对象发送者,事件参数e)
{
//这是由Thread1执行的
test.DoSomeThing()/---->#3
}
受保护的void UpdateTimer_Tick(对象发送方、事件参数e)
{
//计时器控件每次发送一个新线程
Label1.Text=test.Status;//--->#4
}
}
下面是从不同线程使用委托和更新UI元素的示例
delegate string CallFunctionDelegate(string arg1, string arg2);
private void btnStart_Click(object sender, EventArgs e)
{
CallFunctionDelegate delegRunApps = new CallFunctionDelegate(DoSomeThingBig);
AsyncCallback CallBackAfterAsynOperation = new AsyncCallback(AfterDoingSomethingBig);
delegRunApps.BeginInvoke("", "", CallBackAfterAsynOperation, null);
}
private string DoSomeThingBig(string arg1, string arg2)
{
#region Implemetation of time consuming function
//Implemetation of time consuming function
for (int i = 0; i < 5; i++)
{
Thread.Sleep(1000);
if (btnStart.InvokeRequired)
{
btnStart.Invoke((new MethodInvoker(delegate { btnStart.Text = i.ToString(); })));
}
else
{
btnStart.Text = i.ToString();
}
}
#endregion
return arg1.Replace("freetime", arg2);
}
private void AfterDoingSomethingBig(IAsyncResult result)
{
MessageBox.Show("Finaly Done!! ;) ");
btnStart.Invoke((new MethodInvoker(delegate { btnStart.Text = "Start"; })));
}
发生此问题的原因是,在执行as行#2之后,TimerRead每次都会创建一个新实例。因此test.Status始终为null。。这就是问题的原因使Status属性静态(Test.Status)实际上达到了目的。。但我想知道为什么它不适用于实例变量。。