public void StartGenerating() { if (!AtLeastOneEnabled || TotalPercentage != 100) { return; } Reset(); Task.Run(async() => { Generate = true; long currentFileSize = 0; try { using (StreamWriter outFile = File.AppendText(OutFileName)) { bool first = true; while (Generate && currentFileSize < FileSizeInKB * 1024) { int rindex = new Random().Next(RandomObjectCount); RandomObject ro = randomObjects.ElementAt(rindex); if (!ro.IsEnable) { continue; } await InvokeAsync(() => { if (ro.GenerateNext()) { outFile.Write((first ? "" : ",") + ro.LastGeneratedObject); currentFileSize += 4; StateHasChanged(); currentFileSize = new FileInfo(OutFileName).Length; first = false; } }); //Thread.Sleep(100); } } } catch { } Generate = false; }); }