Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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# 如何检测变量的变化并在c中获取变量的值#_C# - Fatal编程技术网

C# 如何检测变量的变化并在c中获取变量的值#

C# 如何检测变量的变化并在c中获取变量的值#,c#,C#,我已使用属性更改事件为bool值分配一个值,以尝试获取连接状态 但是,我想听听另一个类中变量的这种变化,并执行一些操作。如何在C#中实现这一点 在另一个类中,它基本上是一个服务,我想监听变量IsDisconnected。请有人帮帮我 我的服务类别: [return: GeneratedEnum] public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags fl

我已使用
属性更改事件
bool
值分配一个值,以尝试获取连接状态

但是,我想听听另一个类中变量的这种变化,并执行一些操作。如何在
C#
中实现这一点

在另一个类中,它基本上是一个
服务
,我想监听变量
IsDisconnected
。请有人帮帮我

我的服务类别:

[return: GeneratedEnum]
public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
{
    try
    {
        Toast.MakeText(this, "Background service started", ToastLength.Long);
        t = new Thread(() =>
        {
            Task.Run(async () =>
            {
                ConnectionListener gatt = new ConnectionListener ();
                gatt.PropertyChanged += (s, e) =>
                {
                    if (e.PropertyName == nameof(GattCallback.IsDisconnected))
                    {

                    }
                };

            });
        });

        t.Start();
    }
}

假设类的实例名为
connection
。然后从另一个类连接
PropertyChanged
事件:

connection.PropertyChanged += (s,e) =>
{
   if (e.PropertyName == nameof(YourClass.IsDisconnected))
   { 
       //isDisconnected changed, perform your logic
   }
}
当然,这只是一个示例代码,如果两个实例具有不同的生存期,那么将事件处理移动到一个方法是合适的。通过这样做,您可以稍后取消订阅该活动,这样就不会导致内存泄漏

您还需要更新
GattCallback
类以设置
IsDisconnected
属性,而不是
OnConnectionChange
方法中的
IsDisconnected
字段:

if(newState == ProfileState.Connected)
{
    IsDisconnected = false; //notice change true -> false
    gatt.DiscoverServices();
}

else if(newState == ProfileState.Disconnected)
{
    gatt.Close();
    IsDisconnected = true;
    Log.Info("BLE", "Status: Disconnected");
}

另外,您似乎有一个bug—在这两种情况下,您都将
IsDisconnected
设置为
true
,这可能不是您想要的。

假设您的类的实例名为
connection
。然后从另一个类连接
PropertyChanged
事件:

connection.PropertyChanged += (s,e) =>
{
   if (e.PropertyName == nameof(YourClass.IsDisconnected))
   { 
       //isDisconnected changed, perform your logic
   }
}
当然,这只是一个示例代码,如果两个实例具有不同的生存期,那么将事件处理移动到一个方法是合适的。通过这样做,您可以稍后取消订阅该活动,这样就不会导致内存泄漏

您还需要更新
GattCallback
类以设置
IsDisconnected
属性,而不是
OnConnectionChange
方法中的
IsDisconnected
字段:

if(newState == ProfileState.Connected)
{
    IsDisconnected = false; //notice change true -> false
    gatt.DiscoverServices();
}

else if(newState == ProfileState.Disconnected)
{
    gatt.Close();
    IsDisconnected = true;
    Log.Info("BLE", "Status: Disconnected");
}

另外,您似乎有一个bug-在这两种情况下,您都将
IsDisconnected
设置为
true
,这可能不是您想要的。

您必须订阅此事件,并且当为
IsDisconnected
属性引发此事件时,按您想要的方式进行操作。在引发事件时,您收到的参数中包含有关更改所涉及的属性的信息。如何进一步实现此信息?如果此其他类已具有对带有事件的类的访问权限,则它将如下所示
connectionListener.PropertyChanged+=OnPropertyChanged
private voidOnPropertyChanged(对象发送方,PropertyChangedEventArgs){if(args.PropertyName==nameof(connectionListener.IsDisconnected)){DoSomething();}}}
@yoger:我已经在上面的服务中添加了代码,但是它没有命中
if(e.PropertyName==nameof)(GattCallback.IsDisconnected))
您能提供建议吗?您是否尝试过调试以验证是否确实引发了事件?如果是,属性名称是否有效?您必须订阅此事件,以及何时引发
IsDisconnected
property act。有关更改关注的属性的信息包含在您收到的参数中当引发事件时,如何进一步实现此操作?如果此其他类已具有对具有事件的类的访问权限,则类似于
connectionListener.PropertyChanged+=OnPropertyChanged
private void OnPropertyChanged(对象发送方,PropertyChangedEventArgs){If(args.PropertyName==nameof(connectionListener.IsDisconnected)){DoSomething();}}
@yoger:我已经在上面的服务中添加了代码,但是它没有击中
if(e.PropertyName==nameof(GattCallback.IsDisconnected))
您能提供建议吗?您是否尝试过调试以验证是否确实引发了事件?如果是,属性名称是否有效?基本上,我的
服务
是我应用程序中的后台服务类。您认为它会起作用吗?我已在上面的服务中添加了代码,但它没有命中
If(e.PropertyName==nameof)(GattCallback.IsDisconnected))
您能提供建议吗?您必须在
OnConnectionChange
方法中指定
IsDisconnected
属性,而不是
IsDisconnected
字段,以便执行setter并触发
PropertyChanged
事件。基本上,我的
服务
是我的应用程序中的后台服务类o你认为它会工作吗?我已经在上面的服务中添加了代码,但是它没有达到
if(e.PropertyName==nameof(GattCallback.IsDisconnected))
您能提供建议吗?您必须在
OnConnectionChange
方法中指定
IsDisconnected
属性,而不是
IsDisconnected
字段,以便执行setter并触发
PropertyChanged
事件。