如何在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