| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | using Aitex.Core.RT.DataCenter;using Aitex.Core.RT.OperationCenter;using Aitex.Core.Util;using DocumentFormat.OpenXml.Vml.Office;using MECF.Framework.Common.OperationCenter;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;public class RecipeLockManager : Singleton<RecipeLockManager>{    private bool _isLocked;    private bool IsLocked    {        get { return _isLocked; }        set        {            locktimer?.Dispose();            _isLocked = value;            if (!value)                return;            locktimer = new Timer(LockCallBack, null, 12000, 10000);        }    }    private Timer locktimer;    private bool _isInit = false;    void LockCallBack(object state)    {        this.IsLocked = false;    }    public void Initialize()    {        if (this._isInit)            return;        try        {            DATA.Subscribe("RecipeEditLock", () => this.IsLocked, SubscriptionAttribute.FLAG.IgnoreSaveDB);            OP.Subscribe($"RecipeEditLock", LockCallBack);            this._isInit = true;        }        catch        {        }    }    private bool LockCallBack(out string reason, int time, object[] param)    {        reason = string.Empty;        if (param.Length >= 1 && param[0] is bool isLocked)            this.IsLocked = isLocked;        return true;    }}
 |