Помогите разобраться с Tab: работа с эмуляцией.

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
93
Происходит, какой-то ад, при работе с Tab FullEmulation из своей библиотеке.

Когда запускаю проект для дебага через VS, в ZP все работает идеально (куда надо кликается, что нужно вводится). Но стоит запустить этот же код в C# кубике, перестают работать все действия с FullEmulation (ошибок ни каких нет, просто мышка не водится, клики не кликают и ничего не происходит), но стоит включить точку остановы в C# кубике (в любом месте, даже в самом конце), почти все начинает работать ( только мышка странно водится, но клики идут куда надо и данные вводятся).

Кто сталкивался с похожим, какие есть решения? Как работать с Tab методами FullEmulation из своей библиотеке и запускать их в ZP.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 529
Благодарностей
3 375
Баллы
113
стоит запустить этот же код в C# кубике, перестают работать все действия с FullEmulation (ошибок ни каких нет, просто мышка не водится, клики не кликают и ничего не происходит), но стоит включить точку остановы в C# кубике (в любом месте, даже в самом конце), почти все начинает работать ( только мышка странно водится, но клики идут куда надо и данные вводятся).
Странная ситуация, обычно как раз всё наоборот, так как в дебаг (и аналогично в VS) передаются не все объекты (просто null).
Происходит, какой-то ад, при работе с Tab FullEmulation из своей библиотеке.
Что в других версиях постера?
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
93
Странная ситуация, обычно как раз всё наоборот, так как в дебаг (и аналогично в VS) передаются не все объекты (просто null).

Что в других версиях постера?
Записал видео как работает код, буду очень благодарен если поможете решить данную проблему.
В настройках отключена галочка "Отладка > Пересоздавать поток выполнения C#".

 
Последнее редактирование:

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 529
Благодарностей
3 375
Баллы
113
Записал видео как работает код, буду очень благодарен если поможете решить данную проблему.
В настройках отключена галочка "Отладка > Пересоздавать поток выполнения C#".

Баг где-то в вашем коде, остаются прошлые данные.
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
93
Баг где-то в вашем коде, остаются прошлые данные.
Да, скорей всего, проблема в моей реализации, но я не понимаю как это пофиксить. И остаётся вопрос, почему при использовании точки остановы, код начинает работать?
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
93
Вот пример ZennoConfig

C#:
public class ZennoConfig
{
    [ThreadStatic] private static ZennoConfig _handler;
    public static ZennoConfig Handler { get => _handler; }

    public IZennoPosterProjectModel Project { get; set; }
    public Instance Instance { get; set; }

    public static void Configure(Instance instance, IZennoPosterProjectModel project)
    {
        _handler = new ZennoConfig()
        {
            Project = project,
            Instance = instance,
        };
    }

    public static Tab GetActiveTab() => Handler.Instance.ActiveTab;
    public static Instance GetInstance() => Handler.Instance;
    public static IZennoPosterProjectModel GetProject() => Handler.Project;
}
Через него классы в библиотеке получают данные instance и project.
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
93
Получилось добиться нужного результата через метод расширения Tab. Добавил в Tab свою эмуляцию, все стало работать.

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

Ахилес

Client
Read only
Регистрация
11.11.2020
Сообщения
956
Благодарностей
393
Баллы
63
Вот пример ZennoConfig

C#:
public class ZennoConfig
{
    [ThreadStatic] private static ZennoConfig _handler;
    public static ZennoConfig Handler { get => _handler; }

    public IZennoPosterProjectModel Project { get; set; }
    public Instance Instance { get; set; }

    public static void Configure(Instance instance, IZennoPosterProjectModel project)
    {
        _handler = new ZennoConfig()
        {
            Project = project,
            Instance = instance,
        };
    }

    public static Tab GetActiveTab() => Handler.Instance.ActiveTab;
    public static Instance GetInstance() => Handler.Instance;
    public static IZennoPosterProjectModel GetProject() => Handler.Project;
}
Через него классы в библиотеке получают данные instance и project.
все в static... отличный код ;-)
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
93
все в static... отличный код ;-)
ThreadStatic - статик для потока.

Объясни, почему мне нужно уйти от статика и создавать для каждого класса, который использует project или instance новый экземпляр и забивать память одними и теми же данными project и instance?
 
Последнее редактирование:

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 529
Благодарностей
3 375
Баллы
113
Да, скорей всего, проблема в моей реализации, но я не понимаю как это пофиксить. И остаётся вопрос, почему при использовании точки остановы, код начинает работать?
Код выполняется в отдельном процессе, который прибивается, когда отладка и работа в VS завершаются.
 

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)