locked
Show Increment Process in BusyIndicator RRS feed

  • Question

  • User-2611850 posted

    Hello Everyone,

    I have on my Blazor Webassembly .Net 5 app created a BusyIndicator which works well. I now have a servertask uploading data. I would like to show a percentage in the Busyindicator showing the user how much % is left. I registered a singleton service on the Serverside which has events on it after an item has been read.

    What is the proper way to get this information to the client, triggered by the server?

    Any Help would be greatly appreciated, Thanks! Kind blessings, Andreas

    Here is the Percentage Service on the Server:

    public class ItemCounterService : IItemCounterService, IDisposable
        {
            public ItemCounterService()
            {
                currentItemNumber = -1;
                maxNumberOfItems = -1;
                IsCounterActive = false;
            }
            public bool IsCounterActive { get; set; } = false;
            public EventCallback<bool> IsCounterActiveChanged { get; set; }
            private int currentItemNumber = -1;
            public int CurrentItemNumber
            {
                get { return currentItemNumber; }
                set 
                {
                    if (currentItemNumber != value)
                    {
                        currentItemNumber = value;
                        PercentageChanged.InvokeAsync(String.Format("Value: {0:P2}.", maxNumberOfItems));
                    }
                }
            }
            private int maxNumberOfItems = -1;
            public int MaxNumberOfItems
            {
                get { return maxNumberOfItems; }
                set
                {
                    if (maxNumberOfItems != value)
                    {
                        maxNumberOfItems = value;
                        PercentageChanged.InvokeAsync(String.Format("Value: {0:P2}.", maxNumberOfItems));
                    }
                }
            }
            public double Percentage { get { return (maxNumberOfItems == -1 || maxNumberOfItems == 0) ? 0 : currentItemNumber / maxNumberOfItems; } }
            public EventCallback<string> PercentageChanged { get; set; }
            public void Initialize(int max) 
            {
                IsCounterActive = true;
                maxNumberOfItems = max;
                currentItemNumber = 0;
                IsCounterActiveChanged.InvokeAsync(IsCounterActive);
            }
            public void Increase()
            {
                if (currentItemNumber <= maxNumberOfItems) 
                {
                    ++CurrentItemNumber;
                }
            }
    
            public void Dispose()
            {
                IsCounterActive = false;
                maxNumberOfItems = -1;
                currentItemNumber = -1;
            }
        }

    Wednesday, February 10, 2021 2:21 PM

Answers