Referencing variable in class from within the same class

Refresh

November 2018

Views

64 time

2

I am currently for the first time in need to rewrite my app into library. I have succes so far, but I need to somehow make auto repeated process, which could be started by simply camShield.start().

But I am not able to reference the enabled from anywhere. The idea here is that I would start thread with timer, which would be checking on the enabled variable. But to do that, I need another function, like stop(), which would set the enabled variable to false.

Is there any better way to implement such a function?
---EDIT----
I need to write functions CamShield.start() and CamShield.stop(), which would be able to access the CamShield.enabled variable.

Here is part of code, where I am trying to solve it (It is Class Library)

using SharpAdbClient;
using System;
using System.Diagnostics;
using System.Threading;

namespace BaReader
{
    public class Private
    {
        public class CamShield
        {
            internal bool enabled = true;

            public static void start()
            {
                new Thread(() =>
                {
                    Thread.CurrentThread.IsBackground = true;                        
                    Timer camShieldTimer = new Timer(tap, null, 0, 20000);
                }).Start();
            }
        }

        internal static void tap(Object o)
        {
            AdbClient.Instance.ExecuteRemoteCommand("input tap 600 900", Device.lookup(), null);
            Debug.WriteLine("Tapped");
        }
    }
}

Thanks in advance for any ideas.

2 answers

1

Вы заявили статические методы и переменная включена как не статические, так что вы не смогли получить к нему доступ,

    public class CamShield
    {
        internal bool enabled = false;
        public void start()
        {
            if(!enabled)
            {
                enabled = true;
                //your code to start
            }
        }

        public void stop()
        {
            if(enabled)
            {
                //your code to stop
                enabled = false;
            }
        }
    }

Я уверен, что вы можете создать экземпляр класса начала CamShield и доступа и остановки методы снаружи.

0

Для того , чтобы остановить поток, вам нужно , чтобы убить его с помощью Прервать . Прилагаемый вопрос предоставит вам достаточно инструментов и знаний , чтобы получить там.

второй, вы не можете получить доступ к включены из-за вашу область. Взгляните еще раз на код:

    public class Private
    {
        public class CamShield
        {
            internal bool enabled = true;

            public static void start()
            {
                new Thread(() =>
                {
                    Thread.CurrentThread.IsBackground = true;                        
                    Timer camShieldTimer = new Timer(tap, null, 0, 20000);
                }).Start();
            }
        }

        internal static void tap(Object o)
        {
            AdbClient.Instance.ExecuteRemoteCommand("input tap 600 900", Device.lookup(), null);
            Debug.WriteLine("Tapped");
        }
    }

Вы internal bool enabledв рамках класса CamShield и не будут доступны для вашего метода крана , если вы не инициализировать CamShield Class.

для того , чтобы использовать ваши internal bool enabledвам нужно объявить его в частном классе , а затем использовать его в кране:

    public class Private
    {
        internal bool enabled = true;

        public class CamShield
        {
            enabled = false;
            public static void start()
            {
                new Thread(() =>
                {
                    Thread.CurrentThread.IsBackground = true;                        
                    Timer camShieldTimer = new Timer(tap, null, 0, 20000);
                }).Start();
            }
        }

        internal static void tap(Object o)
        {
            enabled = true;
            AdbClient.Instance.ExecuteRemoteCommand("input tap 600 900", Device.lookup(), null);
            Debug.WriteLine("Tapped");
        }
    }