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—在UI层中定义的类
  • test-类级别变量
  • Submit按钮调用函数DoSomeThing()。它在业务层执行某些操作,并不断更新类的Status属性
  • Timercontrol获取要在UI中显示的状态(来自同一变量测试)
  • Submit按钮由一个线程运行(比如线程1)并启动操作。是从BL更新status属性的线程

    Timer控件每次创建一个新线程来运行TimerEvent(比如线程2、3等)

    这里的问题是由thread1更新的test.Status属性不能被其他线程访问。。即使该属性已由线程1更新,它也始终为null

    解决这个问题的办法是什么? 提前谢谢

    公共类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)实际上达到了目的。。但我想知道为什么它不适用于实例变量。。