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

  • Автор темы Автор темы volody00
  • Дата начала Дата начала

volody00

Client
Регистрация
06.09.2016
Сообщения
991
Реакции
1 111
Баллы
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?
 
Вроде как в ZP static переменные остаются после выполнения инстанса, неважно сколько потоков было.

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

Значение сбросится если проект из ZennoPoser-а убрать и добавить, либо ZP перезапустить.
 
вопрос для себя не закрыл. может изначально я делал неверно и надо объявлять всё в статическом конструкторе. сделал его. и вот как ведет себя код:


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


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

Какую цель ты преследуешь?
 
статические переменные общие и живут до тех пор, пока живёт программа (зеннопостер в данном случае).

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

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

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

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