Кто разбирается в c# подскажите

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
Не могу понять, в чем прикол. Объясните кто шарит, почему так происходит.

Общий код:
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using ZennoLab.CommandCenter.TouchEvents;
using ZennoLab.CommandCenter.FullEmulation;
using ZennoLab.InterfacesLibrary.Enums;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
       
        public static int bla = 1;
       
        public static void meth(IZennoPosterProjectModel project, Instance instance)
        {
                project.SendInfoToLog("значение переменной bla - " + bla.ToString(), true);
                Thread.Sleep(3000);
                bla = 10;
        }

        // Insert your code here
    }
}
Кубик c#:
C#:
CommonCode.meth(project, instance);
Меня смущает вот такой результат (это в один поток):
1.png


static переменные общие для всех потоков(поправьте, если не прав). но почему при выполнении в 1 поток после завершения работы следующий всё равно видит переменную со значением 10?
 

Voronin

Client
Регистрация
30.09.2019
Сообщения
76
Благодарностей
54
Баллы
18
Вроде как в ZP static переменные остаются после выполнения инстанса, неважно сколько потоков было.

Т.е. один проект/шаблон инициирует эти переменные при первом старте проекта в ZP, потом они сохраняются.

Значение сбросится если проект из ZennoPoser-а убрать и добавить, либо ZP перезапустить.
 

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
вопрос для себя не закрыл. может изначально я делал неверно и надо объявлять всё в статическом конструкторе. сделал его. и вот как ведет себя код:


ничего не пойму. @Zymlex , @doc , восполните кто-нибудь пробел в знаниях.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
вопрос для себя не закрыл. может изначально я делал неверно и надо объявлять всё в статическом конструкторе. сделал его. и вот как ведет себя код:


ничего не пойму. @Zymlex , @doc , восполните кто-нибудь пробел в знаниях.
статические переменные общие и живут до тех пор, пока живёт программа (зеннопостер в данном случае).

Какую цель ты преследуешь?
 

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
статические переменные общие и живут до тех пор, пока живёт программа (зеннопостер в данном случае).

Какую цель ты преследуешь?
Спасибо за разъяснение. А почему с точкой останова то всё норм работает? Как она влияет на поведение программы?

Какую цель преследую - да просто разобраться, чё к чему. Написал шаблон, в котором ничего не работает как надо, вот разбираюсь, чего там намудрил. Вообще я static переменные использовал вместо project.Variables["test"].Value для хранения значений, что конечно было ошибкой, т.к. они одни на все потоки (чё то позабыл об этом). Сейчас буду пытаться переписывать.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
824
Баллы
93
т.к. они одни на все потоки (чё то позабыл об этом)
Добавь атрибут ThreadStatic и переменная будет уникальная для каждого потока.

И еще на эту тему.
 
  • Спасибо
Реакции: volody00

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