При первом нажатии кнопки выводятся предыдущие значения чисел
Задание состоит в том, что пользователь вводит 2 числа в textbox1 и textbox2. Эти значения записываются в файл, а из файла выводятся ответы факториала и простых чисел. Проблема состоит в том, что при первом запуске программы(при нажатии кнопки) из файла выводится значения предыдущего клика кнопки. То есть не происходит обновления значений сразу же, а после следующего нажатия кнопки значения выводятся. И так каждый раз. Надо два раза нажимать, чтобы произошло обновление значений. Грешу на StreamWriter, но мне не ясно как сделать так, чтобы сразу же записывались значения в файл, а потом из файла выводилось в mackedtextbox.
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
static double Factorial(int x)
{
if (x == 0)
{
return 1;
}
else
{
return x * Factorial(x - 1);
}
}
static bool Prost(int number)
{
if (number < 2) return false;
for (int i = 2; i <= Math.Sqrt(number); i++)
{
if (number % i == 0)
return false;
}
return true;
}
// возвращает строку, содержащую последовательность простых чисел от 2 до N через запятую
private string GetPrimeNumbers(int n)
{
List<int> primeNumbers = new List<int>();
for (int i = 2; i <= n; i++)
{
if (Prost(i))
primeNumbers.Add(i);
}
return string.Join(",", primeNumbers);
}
public Form1()
{
InitializeComponent();
}
public void Fact()
{
richTextBox3.Text = Convert.ToString(Factorial(int.Parse(textBox1.Text)));
}
public void Prostie()
{
richTextBox4.Text = Convert.ToString(GetPrimeNumbers(int.Parse(textBox3.Text)));
}
public void Click1()
{
CheckForIllegalCrossThreadCalls = false;
Thread thread1 = new Thread(Fact);
StringBuilder sk = new StringBuilder();
{
Thread.Sleep(500);
thread1.Priority = ThreadPriority.Lowest;
thread1.Start();
thread1.IsBackground = true;
{
using (FileStream file = File.Open("info.txt", FileMode.Append))
using (StreamWriter writer = new StreamWriter(file, Encoding.UTF8, 64))
{
{
//writer.WriteLine(textBox1.Text);
writer.WriteLine(richTextBox3.Text);
writer.Dispose();
writer.Close();
file.Close();
thread1.Join();
thread1.Abort();
}
}
}
}
using (var fileStream = File.OpenRead("info.txt"))
using (var streamReader = new StreamReader(fileStream, System.Text.Encoding.UTF8, true))
{
String line;
while ((line = streamReader.ReadLine()) != null)
{
richTextBox1.Text = File.ReadAllText(@"info.txt");
}
//streamReader.ReadToEnd();
streamReader.Close();
fileStream.Close();
}
StringBuilder sbz = new StringBuilder();
using (StreamReader sr = new StreamReader(@"info.txt"))
{
string line;
sr.BaseStream.Seek(-8, SeekOrigin.End); //минус кол. символов с конца файла
while (!sr.EndOfStream)
{
line = sr.ReadLine();
sbz.AppendLine(string.Format(line + " "));
maskedTextBox1.Text = sbz.ToString();
}
}
//richTextBox1.Text = File.ReadAllText(@"info.txt");
Thread thread2 = new Thread(Prostie);
StringBuilder sw = new StringBuilder();
{
Thread.Sleep(300);
thread2.Priority = ThreadPriority.Lowest;
thread2.Start();
thread2.IsBackground = true;
{
using (FileStream file1 = File.Open(@"info2.txt", FileMode.Append))
using (StreamWriter writer1 = new StreamWriter(file1, System.Text.Encoding.UTF8, 64))
{
{
//writer1.WriteLine(textBox3.Text);
writer1.WriteLine(richTextBox4.Text);
writer1.Flush();
writer1.Dispose();
writer1.Close();
file1.Close();
thread2.Join();
thread2.Abort();
}
}
}
}
using (var fileStream = File.OpenRead(@"info2.txt"))
using (var streamReader = new StreamReader(fileStream, System.Text.Encoding.UTF8, true))
{
String line;
while ((line = streamReader.ReadLine()) != null)
{
richTextBox2.Text = File.ReadAllText(@"info2.txt");
}
streamReader.Close();
fileStream.Close();
}
StringBuilder sb = new StringBuilder();
using (StreamReader sr = new StreamReader(@"info2.txt"))
{
string line;
sr.BaseStream.Seek(-30, SeekOrigin.End); //минус кол. символов с конца файла
while (!sr.EndOfStream)
{
line = sr.ReadLine();
//sb.AppendLine(string.Format("\r" + " "));
sb.AppendLine(string.Format(" " + line + " "));
maskedTextBox2.Text = ( sb.ToString());
}
}
}
private void button1_Click(object sender, EventArgs e)
{
Click1();
}
}
}