+
+
Telerik Progress Bar Component
+
+
+
+
+@code {
+ private const int TimerInterval = 1000;
+ private const int TotalTime = 10 * TimerInterval;
+ private double ProgressValue = 0;
+ private int ProgressStep = 100 / (TotalTime / TimerInterval);
+ private Timer Timer { get; set; } = new Timer();
+
+ private void Dispose()
+ {
+ StopProgress();
+ Timer?.Close();
+ }
+
+ protected override void OnAfterRender(bool firstRender)
+ {
+ if (Timer.Enabled == false)
+ {
+ Timer.Interval = TimerInterval;
+ Timer.Elapsed -= OnTimerElapsed;
+ Timer.Elapsed += OnTimerElapsed;
+ Timer.AutoReset = true;
+ Timer.Start();
+ }
+ }
+
+ private void OnTimerElapsed(Object source, ElapsedEventArgs e)
+ {
+ if (ProgressValue < 100)
+ {
+ UpdateProgress();
+ }
+ else
+ {
+ StopProgress();
+ }
+ }
+
+ private void UpdateProgress()
+ {
+ ProgressValue += ProgressStep;
+
+ InvokeAsync(StateHasChanged);
+ }
+
+ private void StopProgress()
+ {
+ Timer?.Stop();
+ }
+}
+
+
+```
+
+* In here, we've just added the `TelerikProgressBar` component to check the integration configured properly.
+
+* When we run `*.HttpApi.Host` and `*.Blazor` projects, we should see that the `TelerikProgressBar` component works and has similar view as the below gif.
+
+![telerik-progress-bar](./telerik-progress-bar.gif)
+
+* If you haven't seen this component like above, you should check the above configurations and be assure every step done as stated.
+
+### Step 3 - Using The Telerik Blazor Components (Sample Application)
+
+* Let's create a sample application for use other Telerik Blazor Components (like DataGrid).
+
+* We will use [jsonplaceholder](https://jsonplaceholder.typicode.com/) as **mock data** to the listing, adding, updating and deleting posts.
+
+* Firstly, we can create a folder named `Posts` and inside this folder, we can create the classes which are highlighted in the following screenshot.
+
+![sample-application](./sample-application.jpg)
+
+* After classes created we can fill the classes with the following contents.
+
+**Post.cs**
+```csharp
+using System;
+
+namespace TelerikComponents.Posts
+{
+ [Serializable]
+ public class Post
+ {
+ public int Id { get; set; }
+
+ public string Title { get; set; }
+
+ public string Body { get; set; }
+
+ public int UserId { get; set; }
+ }
+}
+```
+
+**Comment.cs**
+```csharp
+using System;
+
+namespace TelerikComponents.Posts
+{
+ [Serializable]
+ public class Comment
+ {
+ public int PostId { get; set; }
+
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+
+ public string Email { get; set; }
+
+ public string Body { get; set; }
+ }
+}
+```
+
+**IPostAppService.cs**
+```csharp
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Services;
+
+namespace TelerikComponents.Posts
+{
+ public interface IPostAppService : IApplicationService
+ {
+ Task