Частотный анализ текста C#

Всем привет:) Очень нужна ваша небольшая помощь с кодом C#…Задание:частотный анализ русского текста
Есть небольшая проблема,результатом в richTextBox1 выводится только частота последней буквы “я” :thinking: вот где ошибочка? как вывести весь список букв с частотами в richTextBox1?

using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;


namespace LAB6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            StreamReader f = new StreamReader("text.txt");
            List<char> lines = new List<char>();
            while (!f.EndOfStream)
            {   string s = f.ReadLine();
                lines.AddRange(s);
                int countAllBukva = 0;
                Dictionary<char, int> CountsBukv = new Dictionary<char, int>()
                {
                    ['а'] = 0,
                    ['б'] = 0,
                    ['в'] = 0,
                    ['г'] = 0,
                    ['д'] = 0,
                    ['е'] = 0,
                    ['ё'] = 0,
                    ['ж'] = 0,
                    ['з'] = 0,
                    ['и'] = 0,
                    ['й'] = 0,
                    ['к'] = 0,
                    ['л'] = 0,
                    ['м'] = 0,
                    ['н'] = 0,
                    ['о'] = 0,
                    ['п'] = 0,
                    ['р'] = 0,
                    ['с'] = 0,
                    ['т'] = 0,
                    ['у'] = 0,
                    ['ф'] = 0,
                    ['х'] = 0,
                    ['ц'] = 0,
                    ['ч'] = 0,
                    ['ш'] = 0,
                    ['щ'] = 0,
                    ['ъ'] = 0,
                    ['ы'] = 0,
                    ['ь'] = 0,
                    ['э'] = 0,
                    ['ю'] = 0,
                    ['я'] = 0,
                };

               
                    foreach (char bukva in lines)
                    {
                        if (IsRussianBukva(char.ToLower(bukva)))
                        {
                            countAllBukva++;
                            CountsBukv[char.ToLower(bukva)]++;
                        }
                    }
              
                    foreach (var bukva in CountsBukv.Keys)
                    {
                        if (CountsBukv[bukva] != 0)

                        {
                            double n = Math.Round(Chastota(countAllBukva, CountsBukv[bukva]), 2);

                            richTextBox1.Text = Convert.ToString("Частота буквы " + bukva + " = " + n + "%");
                      
                        }

                     }  

               
            }
          
        }
        public static double Chastota(int allBukvs, int bukva)
        {
            return Math.Round(((double)bukva / (double)allBukvs * 100.0), 2);
        }
        public static bool IsRussianBukva(char bukva)
        {
            char[] rus = new char[] { 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й',
                'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'};
            foreach (var item in rus)
            {
                if (item == char.ToLower(bukva)) return true;
            }
            return false;
        }

Тут надо например +=

И анализ текста или анализ каждой строки отдельно?
Если текста, то это до цикла чтения строк

а это после

и раз есть

то вместо

можно просто присваивать 0 (или сразу 1) если нет ключа после

Dictionary<TKey,TValue>.ContainsKey(TKey) Method (System.Collections.Generic) | Microsoft Docs


ЗЫ буква по английски это letter, а частота — frequency.