Вызов нестатического метода из статического метода ИСПОЛЬЗОВАНИЕ экземпляра, созданного в статическом методе

c# multithreading static non-static

1318 просмотра

2 ответа

я пытаюсь написать свою собственную игру Console Snake, проблема в том, что у меня есть вся моя игра в основном потоке, затем я создал addVlakno (новый поток), чтобы подсчитывать секунды там, чтобы он мог каждую секунду вызывать метод из экземпляра hra создан в Main, поэтому он очистит консоль и сделает несколько методов для перемещения.

class Program
    { 
        static void Main(string[] args)
        {
            Hra hra = new Hra();
            Thread addVlakno = new Thread(Run);
            addVlakno.Start();

...

        }

        public static void Run()
        {

            Thread.Sleep(1000);
            hra.method(); // The problem is here* 

        }
    }

* Я знаю, что у меня должен быть существующий экземпляр Hra, но мне нужно использовать экземпляр, созданный в Main, это возможно? Некоторые делегаты, или некоторые указатели или другой путь? Поскольку созданный хр имеет все значения для игры, мне нужно их использовать.

Я пытался поставить Hra hra = new Hra();перед Main, но в этом случае я не мог использовать его даже в основном.

Автор: Ators Источник Размещён: 08.11.2019 11:32

Ответы (2)


1 плюс

Решение

Вы можете передать аргументы следующим образом:

static void Main(string[] args)
{
    Hra hra = new Hra();
    Thread addVlakno = new Thread(()=>Run(hra));
    addVlakno.Start();
}

public static void Run(Hra hra)
{
    Thread.Sleep(1000);
    hra.method(); // No problem here* 
}
Автор: Paweł Dyl Размещён: 20.08.2016 03:58

2 плюса

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

static Hra hra = new Hra();

static void Main(string[] args)
{
...
}

Это позволит вам получить доступ hraв Run.

Автор: Tomer Размещён: 20.08.2016 04:00
Вопросы из категории :
32x32