Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#到VB.NET:在这种情况下应该使用AddHandler吗?_C#_Vb.net_Addhandler - Fatal编程技术网

C#到VB.NET:在这种情况下应该使用AddHandler吗?

C#到VB.NET:在这种情况下应该使用AddHandler吗?,c#,vb.net,addhandler,C#,Vb.net,Addhandler,我正在处理以下要转换为VB.NET的C#代码: var interactorAgent = host.InitializeVirtualInteractorAgent(currentWindowHandle, "ConsoleWindowAgent"); interactorAgent .AddInteractorFor(currentWindowBounds) .WithGazeAware() .HasGaze(() => Console.WriteLine("

我正在处理以下要转换为VB.NET的C#代码:

var interactorAgent = host.InitializeVirtualInteractorAgent(currentWindowHandle, "ConsoleWindowAgent");

interactorAgent
    .AddInteractorFor(currentWindowBounds)
    .WithGazeAware()
    .HasGaze(() => Console.WriteLine("Hey there!"))
    .LostGaze(() => Console.WriteLine("Bye..."));
如果发生“.HasGaze”或“.LostGaze”,我想获得函数的回调

我想我必须使用“AddHandler”而不是“=>”,但我不知道如何在VB.NET中做到这一点。 我应该在这里使用AddHandler,对吗

我认为困难的代码位于此声明中:

public static class InteractorExtensions
{
    public static GazeAwareBehavior WithGazeAware(this IMutableBehaviorsInteractor interactor);
    (...)
}

public class GazeAwareBehavior : EventHandlingBase, IBehavior, IChecksummable
{
    public const string HasGazeChangedToken = "HazGazeChanged";

    public GazeAwareBehavior();
    public GazeAwareBehavior(GazeAwareMode mode = GazeAwareMode.Normal, TimeSpan? delayTime = null);

    public TimeSpan DelayTime { get; set; }
    public GazeAwareMode Mode { get; set; }

    public event EventHandler<HasGazeChangedEventArgs> HasGazeChanged;
}
公共静态类交互扩展
{
带有GazeAware的公共静态GazeAware行为(此ImutableBehaviorInteractior Interactior);
(...)
}
公共类GazeAwareBhavior:事件处理库、IBehavior、IChecksummable
{
public const string hasgatechangedtoken=“HazGazeChanged”;
公共场所的行为();
公共GazeAwareBehavior(GazeAwareMode=GazeAwareMode.Normal,TimeSpan?delayTime=null);
公共时间跨度延迟时间{get;set;}
公共GazeAwareMode模式{get;set;}
公共事件事件处理程序已更改;
}
但我不确定

这是更多的代码

如果有人能告诉我需要做什么,我真的很高兴

多谢各位

    public static void Main(string[] args)
    {
        // Everything starts with initializing Host, which manages the connection to the 
        // Tobii Engine and provides all the Tobii Core SDK functionality.
        // NOTE: Make sure that Tobii.EyeX.exe is running
        var host = new Host();

        // InteractorAgents are defined per window, so we need a handle to it.
        var currentWindowHandle = Process.GetCurrentProcess().MainWindowHandle;
        // Let's also obtain its bounds using Windows API calls (hidden in a helper method below).
        var currentWindowBounds = GetWindowBounds(currentWindowHandle);
        // Let's create the InteractorAgent.
        var interactorAgent = host.InitializeVirtualInteractorAgent(currentWindowHandle, "ConsoleWindowAgent");

        // Next we are going to create an interactor, which we will define with the gaze aware behavior.
        // Gaze aware behavior simply tells you whether somebody is looking at the interactor or not.
        interactorAgent
            .AddInteractorFor(currentWindowBounds)
            .WithGazeAware()
            .HasGaze(() => Console.WriteLine("Hey there!"))
            .LostGaze(() => Console.WriteLine("Bye..."));

        Console.ReadKey(true);

        (...)
    }


public static class InteractorExtensions
{
    public static GazeAwareBehavior WithGazeAware(this IMutableBehaviorsInteractor interactor);
    (...)
}

public class GazeAwareBehavior : EventHandlingBase, IBehavior, IChecksummable
{
    public const string HasGazeChangedToken = "HazGazeChanged";

    public GazeAwareBehavior();
    public GazeAwareBehavior(GazeAwareMode mode = GazeAwareMode.Normal, TimeSpan? delayTime = null);

    public TimeSpan DelayTime { get; set; }
    public GazeAwareMode Mode { get; set; }

    public event EventHandler<HasGazeChangedEventArgs> HasGazeChanged;
}

Public Class VirtualInteractorAgent(Of TInteractor As IInteractor, TData)
    Inherits ProviderInteractorAgent(Of IInteractorRepository(Of TInteractor))

    Protected Sub New(agentId As String, defaultWindowId As String, repository As IInteractorRepository(Of TInteractor), createInteractorDelegate As CreateInteractorDelegate)

    Protected ReadOnly Property DefaultWindowId As String
    Protected ReadOnly Property Repository As IInteractorRepository(Of TInteractor)

    Public Sub RemoveInteractor(interactorId As String)
    Public Sub RemoveInteractors(ParamArray ids() As String)
    Public Sub Suspend()
    Public Sub [Resume]()
    Public Sub Clear()
    Protected Overrides Sub Dispose(disposing As Boolean)

    Public Function AddInteractorFor(data As TData) As TInteractor
    Public Function AddInteractorFor(data As TData, Optional parentId As String = "_RootId", Optional z As Double = 0, Optional windowId As String = Nothing, Optional id As String = Nothing) As TInteractor
    Public Function FindInteractor(interactorId As String) As TInteractor
    Public Function AddInteractorsFor(ParamArray datas() As TData) As IEnumerable(Of TInteractor)
    Public Function FindInteractors(ParamArray ids() As String) As IEnumerable(Of TInteractor)
    Public Delegate Function CreateInteractorDelegate(data As TData, Optional parentId As String = "_RootId", Optional z As Double = 0, Optional windowId As String = Nothing, Optional id As String = Nothing) As TInteractor
End Class
publicstaticvoidmain(字符串[]args)
{
//一切都从初始化主机开始,它管理到服务器的连接
//Tobii引擎,并提供所有Tobii核心SDK功能。
//注意:确保Tobii.EyeX.exe正在运行
var host=新主机();
//InteractiorAgent是每个窗口定义的,所以我们需要一个句柄。
var currentWindowHandle=Process.GetCurrentProcess().MainWindowHandle;
//我们还可以使用Windows API调用(隐藏在下面的帮助器方法中)获取其边界。
var currentWindowBounds=GetWindowBounds(currentWindowHandle);
//让我们创建InteractiorAgent。
var interactitoragent=host.InitializeVirtualInteractorAgent(currentWindowHandle,“ConsoleWindowAgent”);
//接下来,我们将创建一个交互者,我们将用凝视感知行为来定义它。
//凝视感知行为只是告诉你是否有人在看互动者。
交互剂
.AddInteractor(currentWindowBounds)
.WithGazeAware()
.HasGaze(()=>Console.WriteLine(“你好!”)
.LostGaze(()=>Console.WriteLine(“再见…”);
Console.ReadKey(true);
(...)
}
公共静态类InteractioExtensions
{
带有GazeAware的公共静态GazeAware行为(此ImutableBehaviorInteractior Interactior);
(...)
}
公共类GazeAwareBhavior:事件处理库、IBehavior、IChecksummable
{
public const string hasgatechangedtoken=“HazGazeChanged”;
公共场所的行为();
公共GazeAwareBehavior(GazeAwareMode=GazeAwareMode.Normal,TimeSpan?delayTime=null);
公共时间跨度延迟时间{get;set;}
公共GazeAwareMode模式{get;set;}
公共事件事件处理程序已更改;
}
公共类VirtualInteractorAgent(将TInteractor作为IInteractor,TData)
继承ProviderInteractorAgent(属于IInteractorRepository(属于TInteractor))
受保护的子新建(agentId为字符串,defaultWindowId为字符串,存储库为IInteractorRepository(TInteractor的),createInteractorDelegate为createInteractorDelegate)
受保护的只读属性DefaultWindowId为字符串
作为IInteractorRepository(TInteractor的)受保护的只读属性存储库
公共子RemoveInteractor(InteractitorID为字符串)
Public Sub RemoveInteractors(ParamArray ID()作为字符串)
公共子系统()
公开分包[简历]()
公共分区清除()
受保护的覆盖子处置(作为布尔值处置)
公共函数AddInteractor(数据作为TData)作为TInteractor
作为TInteractor的公共函数AddInteractor(数据为TData,可选parentId为String=“\u RootId”,可选z为Double=0,可选windowId为String=Nothing,可选id为String=Nothing)
公共函数FindInteractor(InteractitorID作为字符串)作为TInteractor
公共函数AddInteractorFor(作为TData的ParamArray Data())作为IEnumerable(属于TInteractor)
公共函数FindInteractors(paramary id()作为字符串)作为IEnumerable(属于TInteractor)
公共委托函数CreateInteractorDelegate(数据为TData,可选parentId为String=“\u RootId”,可选z为Double=0,可选windowId为String=Nothing,可选id为String=Nothing)作为TInteractor
末级

每当你在C#code中看到
=>
时,你就会看到一个Lambda表达式。C#中的
(params)=>body
的等价物是VB中的
函数(params)body
子(params)body
,具体取决于
body
的计算结果是否为值。在您的情况下,两个lambda都包含
Console.WriteLine
,因此两者的计算结果都不是值,因此都应该是
Sub

Dim interactorAgent=host.InitializeVirtualInteractorAgent(currentWindowHandle,“ConsoleWindowAgent”)
interactorAgent.AddInteractor(currentWindowBounds)。
WithGazeAware()。
HasGaze(Sub()Console.WriteLine(“你好!”)。
LostGaze(Sub()Console.WriteLine(“再见…”);

您通常还可以根据参数的类型来判断是使用
函数
还是
Sub
。在这种情况下,
HasGaze
LostGaze
可能都有类型为
Action
或类似的参数,这意味着使用
Sub
。如果它是
Func
或类似的,那么您将使用
Function
Action
是不返回值的委托,
Func
是返回值的委托。

.HasGaze(()=>Console.WriteLine(“Hey there!”)
应该只是一个
Sub()
.HasGaze(Sub()Console.WriteLine(“Hey there!”)
)。不过我只是匆匆看了一眼。对不起,你能再解释一下吗?