我正在使用此函数(我称其为内联函数,因为我不知道它的通用名称是什么):
pd.DataFrame([[None, 'a'],['b', None]])
当我使用后台任务或FolderWatcher并在其中执行某些操作(例如引发事件)时,它会发生严重错误。
我想知道是否也可以在这里发生。
此内联函数如何运行?
它是否以无限循环运行?如果是的话,它在哪里停止发出信号?
并且可以使用AddHandler代替此内联函数吗?
谢谢。
这是声明Begin,Next和End之类的函数的方式:
Private Shared _fixationDataStream As FixationDataStream
Private Shared Sub CreateAndVisualizeSensitiveFilteredFixationsStream()
_fixationDataStream = _host.Streams.CreateFixationDataStream()
_fixationDataStream.Begin(Function(x, y, __)
Debug.Print(vbLf & "Fixation started at X: {0}, Y: {1}", x, y)
_fixationBeginTime = DateTime.Now
End Function).Data(Function(x, y, __)
Debug.Print("During fixation, currently at: X: {0}, Y: {1}", x, y)
End Function).[End](Function(x, y, __)
Debug.Print("Fixation ended at X: {0}, Y: {1}", x, y)
If _fixationBeginTime <> Nothing Then
Console.ForegroundColor = ConsoleColor.Cyan
Debug.Print("Fixation duration: {0}", DateTime.Now - _fixationBeginTime)
Console.ForegroundColor = _defaultForegroundColor
End If
End Function)
End Sub
答案 0 :(得分:1)
这是使用方法链接(称为流利语法)的,其中每个调用的方法都返回对象。仅通过此一个方法调用就很难确定您的代码将执行什么操作,但是它似乎始于名为_fixationDataStream
的对象。该对象是未知的,因为您没有在代码中发布声明。该对象具有一个名为Begin
的方法,该方法采用一个Action
方法,您正在传递一个匿名函数。它会将对象返回给您,并且您正在为此调用Data
方法。再次,您传递了一个匿名方法,并将该对象返回给您。最后,您正在调用另一个名为End
的方法,其中您要传入一个匿名函数。
这就是您正在做的事情,但是如果没有更多源代码,就不可能描述它的实际工作。
要回答您的其他问题,它不是在无休止的循环中运行(可以,但很可能不是),不,您不能使用AddHandler
,因为没有事件。
答案 1 :(得分:1)
如果您的例程具有正确的签名,则可以使用AddressOf
代替内联lambda。考虑如下内容:
Sub BeginRoutine(ByVal x As Double, ByVal y As Double, ByVal z As Double)
'...
End Sub
Sub DataRoutine(ByVal x As Double, ByVal y As Double, ByVal z As Double)
'...
End Sub
Sub EndRoutine(ByVal x As Double, ByVal y As Double, ByVal z As Double)
'...
End Sub
然后,您可以使用AddressOf
来使委托传递给API,例如
_fixationDataStream.Begin(AddressOf BeginRoutine).Data(AddressOf DataRoutine).[End](AddressOf EndRoutine)
使用内联lambda还是使用AddressOf
更好,取决于您的代码库。如果您只需要一次性完成,那么内联通常会更方便。另一方面,如果您需要在多个地方使用同一例程,那么AddressOf
可能是一个更好的选择。