如何在F#中设置timercalling成员方法?

如何在F#中设置timercalling成员方法?,f#,F#,我正努力做到这一点: type Test() = member val MyTimer : Timer = new Timer(TimerCallback TimerEvent) member mutable Status : bool = false ... member this.StartTimer = this.MyTimer.... member this.TimerEvent = if this.Stat

我正努力做到这一点:

type Test() =

    member val MyTimer : Timer = new Timer(TimerCallback TimerEvent)

    member mutable Status : bool = false
    ...

    member this.StartTimer =
        this.MyTimer....

    member this.TimerEvent =
        if this.Status...
我需要创建一个计时器,它是类实例的一部分,需要由多个方法引用(启动/停止它),但是计时器反馈需要能够访问一些内部状态

我找不到创建计时器对象的语法,因此它可以访问类成员,而类成员可以访问它

但我想我有点困惑:

看起来我可以这样做计时器:

        member this.Timer : Timer = new Timer(TimerCallback (fun x -> printfn "%A" x))

但我认为member是为方法保留的,val是为字段保留的?有人能澄清这一点吗?我可以做member this.xxx,但我不能做val this.xxx。

我找到了这篇文章,因为我第一次需要在F#中实现一个计划作业。 我也在学习F#,这是我第一次看到“val”,所以我读了一些关于它的东西

关于你的问题。
“成员val…”是此处描述的一个特殊情况:

val关键字的另一种用法是与member关键字结合使用,以声明自动实现的属性

我想这回答了你的问题

说到这里,我查阅了你的代码:

member this.Timer : Timer = new Timer(TimerCallback (fun x -> printfn "%A" x))
这对我来说是不正确的,因为它公开了计时器。
我喜欢声明一个对象(计时器),但不初始化它,这样我就可以在多个方法(启动/停止)中引用它的实例,并且(最重要的)正确地处理它

所以,关于你对语法的怀疑

我找不到创建计时器对象的语法,因此它可以访问类成员,而类成员可以访问它

我给出了以下示例:

开放系统
开放系统。线程
键入public ExampleJob()作为我=
让timer_过去:TimerCallback=TimerCallback(乐趣(状态)->me.OnCall(状态))
[]val可变专用计时器:计时器//无需初始化
成员_uuu.IsActive与get()=_uuuuuuuuu.timer null
成员开始(频率:TimeSpan)=
__.Stop()//如果存在上一个计时器,则丢弃它
__.计时器忽略
成员_uu.Stop()=
如果uuu.timer为空,则uuu.timer.Dispose();uuuu。timer.timer.GetHashCode())(DateTime.Now.ToString(“ss:fff”))
接口IDisposable与
成员this.Dispose():单位=
这个
检查计时器本身足以显示状态(IsActive/IsRunning)。
可以按任意顺序多次调用Start/Stop。对Start()的新调用会将当前计时器重置为新的所需频率。
它不是线程安全的,而且我还没有对它进行足够的测试,因此我不能100%确定当/如果整个类不再被引用时计时器是否“存活”。
无论如何,我希望这是一个有用的例子

[更新]

本建议的新版本

开放系统
类型ExampleJob()=
let timer=新定时器。timer()
让OnCall=fun(args)->
//在这儿干活儿
Console.WriteLine(sprintf“OnCall(%O)位于%s”参数处(DateTime.Now.ToString(“ss:fff”))
do timer.appeased.Add(OnCall)//carefull只添加一次
成员this.IsActive,get()=timer.Enabled
此成员。开始(频率:TimeSpan)=

timer.Interval我找到这篇文章是因为我第一次需要在F#中实现一个计划作业。 我也在学习F#,这是我第一次看到“val”,所以我读了一些关于它的东西

关于你的问题。
“成员val…”是此处描述的一个特殊情况:

val关键字的另一种用法是与member关键字结合使用,以声明自动实现的属性

我想这回答了你的问题

说到这里,我查阅了你的代码:

member this.Timer : Timer = new Timer(TimerCallback (fun x -> printfn "%A" x))
这对我来说是不正确的,因为它公开了计时器。
我喜欢声明一个对象(计时器),但不初始化它,这样我就可以在多个方法(启动/停止)中引用它的实例,并且(最重要的)正确地处理它

所以,关于你对语法的怀疑

我找不到创建计时器对象的语法,因此它可以访问类成员,而类成员可以访问它

我给出了以下示例:

开放系统
开放系统。线程
键入public ExampleJob()作为我=
让timer_过去:TimerCallback=TimerCallback(乐趣(状态)->me.OnCall(状态))
[]val可变专用计时器:计时器//无需初始化
成员_uuu.IsActive与get()=_uuuuuuuuu.timer null
成员开始(频率:TimeSpan)=
__.Stop()//如果存在上一个计时器,则丢弃它
__.计时器忽略
成员_uu.Stop()=
如果uuu.timer为空,则uuu.timer.Dispose();uuuu。timer.timer.GetHashCode())(DateTime.Now.ToString(“ss:fff”))
接口IDisposable与
成员this.Dispose():单位=
这个
检查计时器本身足以显示状态(IsActive/IsRunning)。
可以按任意顺序多次调用Start/Stop。对Start()的新调用会将当前计时器重置为新的所需频率。
它不是线程安全的,而且我还没有对它进行足够的测试,因此我不能100%确定当/如果整个类不再被引用时计时器是否“存活”。
无论如何,我希望这是一个有用的例子

[更新]

本建议的新版本

开放系统
类型ExampleJob()=
let timer=新定时器。timer()
让OnCall=fun(args)->
//在这儿干活儿
Console.WriteLine(sprintf“OnCall(%O)位于%s”参数处(DateTime.Now.ToString(“ss:fff”))
do timer.appeased.Add(OnCall)//carefull只添加一次
成员this.IsActive,get()=timer.Enabled
此成员。开始(频率:TimeSpan)=
计时器。时间间隔看起来你是u