C# 类中的Perdiodic事件,不阻塞线程,线程计时器

C# 类中的Perdiodic事件,不阻塞线程,线程计时器,c#,.net,C#,.net,我对C#和编程一无所知。目前我遇到以下问题,希望您能帮助我。我有一个程序目前看起来像这样: public class myClass { public void SetSomething(Parameter) { ///Here something is set } private void DoSomething() { ///Here something is done using paramaters from th

我对C#和编程一无所知。目前我遇到以下问题,希望您能帮助我。我有一个程序目前看起来像这样:

public class myClass
{
    public void SetSomething(Parameter)
    {
        ///Here something is set
    }

    private void DoSomething()
    {
        ///Here something is done using paramaters from the SetSomething()
    }

    public void Run()
    {
        DoSomething(); //this needs to be done periodicly after started one time
    }

    public void Stop()
    {
        //Stop doing something periodically
    }
}
从外部函数(用户通过表单输入)调用SetSomething、Run和Stop。如果调用run(),DoSomething必须定期运行,直到调用Stop()。问题是:这不应该阻止当前线程。所以睡眠(x)不是一个选项。SetSomething参数的更改非常频繁,因此在之前调用Stop(),之后调用另一个Run(),不能更改DoSomething()的参数

最有可能的计时器是这里的完美解决方案。但由于该程序在WinCE6上使用compact.Net framework系统,定时器名称空间不可用。我尝试使用system.windows.forms.Timer,但这永远不会触发给定的事件(可能是因为它位于错误的线程中。我没有编写表单,也不能更改它)。所以我唯一的选择似乎是System.threading.timer

我试图让它运行几个小时,但有一次我所有的尝试都结束了:因为我需要从不同的方法启动和停止计时器,所以我需要在方法之外声明它。问题是:我只能在这里将静态方法声明为委托。如果该方法是静态的,我无法更改timers委托方法使用的参数


我知道我的英语和解释不是最好的,但我希望你能理解我的意思。如何实现此功能?问题是:我不能更改调用我的类的函数。

为什么必须将计时器声明为静态?你不应该。只需在类中将其声明为正则变量。

我并不是将计时器本身声明为静态。我需要给他一个静态方法作为他的委托函数。这是我的计时器代码:
TempLoop TheTempLoop=newtemploop();AutoResetEvent autoEvent=新的AutoResetEvent(假);TimerCallback tcb=TheTempLoop.DoLoop;计时器TheLoopTimer=新计时器(tcb、autoEvent、System.Threading.Timeout.Infinite、System.Threading.Timeout.Infinite)否,您不需要“给他”一个指向静态方法的委托?(无论如何,可能是这样,但如果是这样的话,那真的是非常非常糟糕的代码)因为我需要在方法之外编写代码(因为需要在Run()和Stop()中调用timer.change方法),我需要在类的头部声明计时器(在方法之外),在那里,我只能“给他”静态方法的委托。我不了解详细信息,但您的问题不是必须将计时器声明为静态,问题是您有其他代码需要调用静态方法。这就是问题所在。解决公共类MyClass{TempLoop TheTempLoop=new TempLoop();AutoResetEvent autoEvent=new AutoResetEvent(false);TimerCallback tcb=TheTempLoop.DoLoop;Timer TheLoopTimer=new Timer(tcb,autoEvent,System.Threading.Timeout.Infinite,System.Threading.Timeout.Infinite);//下面的方法}
给了我编译器错误:错误
字段初始值设定项不能引用非静态字段、方法或属性