private async void ButtonCalculate_Click(object sender, EventArgs e) { try { if (comboBoxOperation.SelectedValue.ToString() != "China theoreme") { if (string.IsNullOrEmpty(textBoxFirstOperand.Text) || string.IsNullOrEmpty(textBoxSecondOperand.Text)) { if (comboBoxOperation.SelectedValue.ToString() != "Sqrt") { throw new ArgumentNullException("Enter all operands!"); } } var firstOperand = textBoxFirstOperand.Text; var secondOperand = textBoxSecondOperand.Text; if (comboBoxOperation.SelectedValue.ToString() == "Sqrt") { secondOperand = "0"; } Number num1 = new Number(firstOperand); Number num2 = new Number(secondOperand); Number module = new Number(); if (checkBoxUseModule.Checked) { module = new Number(textBoxModule.Text); } labelRest.Text = "0"; string resultString = ""; bool isLogical = false; Number result = new Number(); timer.Interval = 10; timer.Start(); switch (comboBoxOperation.Text) { case "Add": if (checkBoxUseModule.Checked) { result = await Number.ModuleAsync(Number.Add(num1, num2), module); } else { result = await Number.AddAsync(num1, num2); } break; case "Subtract": if (checkBoxUseModule.Checked) { result = await Number.ModuleAsync(Number.Subtract(num1, num2), module); } else { result = await Number.SubtractAsync(num1, num2); } break; case "Multiply": if (checkBoxUseModule.Checked) { result = await Number.ModuleAsync(Number.Multiply(num1, num2), module); } else { result = await Number.MultiplyAsync(num1, num2); } break; case "Divide": var res = await Number.DivideAsync(num1, num2); result = res.result; labelRest.Text = res.rest.ToString(); break; case "Power": if (checkBoxUseModule.Checked) { result = await Number.ExponentWithModuleAsync(num1, num2, module); } else { result = await Number.ExponentAsync(num1, num2); } break; case "Module": if (checkBoxUseModule.Checked) { result = await Number.ModuleAsync(Number.Module(num1, num2), module); } else { result = await Number.ModuleAsync(num1, num2); } break; case "Sqrt": if (checkBoxUseModule.Checked) { result = await Number.ModuleAsync(Number.Sqrt(num1), module); } else { result = Number.Sqrt(num1); } break; case "Less": isLogical = true; resultString = (num1 < num2).ToString(); break; case "Great": isLogical = true; resultString = (num1 > num2).ToString(); break; case "Less or Equal": isLogical = true; resultString = (num1 <= num2).ToString(); break; case "Great or Equal": isLogical = true; resultString = (num1 >= num2).ToString(); break; case "Equal": isLogical = true; resultString = (num1 == num2).ToString(); break; case "Not Equal": isLogical = true; resultString = (num1 != num2).ToString(); break; } timer.Stop(); if (!isLogical) { resultString = result.ToString(); } using (StreamWriter writer = new StreamWriter(@"C:\Users\Evgentus\Desktop\result.txt", false)) { await writer.WriteLineAsync(resultString); // асинхронная запись в файл } labelResult.Text = resultString; } else { List <StructureForModEquations> equations = GetAllEquations(); var result = Number.ChinaTheoreme(equations); string resultString = result.ToString(); using (StreamWriter writer = new StreamWriter(@"C:\Users\Evgentus\Desktop\result.txt", false)) { await writer.WriteLineAsync(resultString); // асинхронная запись в файл } labelResult.Text = resultString; } } catch (Exception ex) { MessageBox.Show(ex.Message); } }