Как просто работать с потоками через лямбда выражения в C#

Небольшой совет, с наглядным примером, о том как, используя лямбда выражения, запустить отдельный поток с несколькими параметрами.


Дата: 22.08.2012 г.

Рейтинг: 0

Метки: C sharp, программирование

Все гениальное просто, а лямбда выражения - просто замечательнейшая вещь.

Не тратя время на предысторию просто хочу показать вам кусок кода, а потом немного его поясню.using System;
using System.IO;
using System.Text;
using System.Threading;

namespace converter
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            var t1 = new Thread (() => convert("...","..."));
            var t2 = new Thread (() => convert("...","..."));
            t1.Start();
            t2.Start();
            Console.ReadKey();//*/
        }

        static void convert (String fl_name,String fl_end_name)
        {
            String all_text, bin_text = "";
            StreamReader reader = new StreamReader (fl_name, Encoding.GetEncoding ("windows-1251"));

            all_text = reader.ReadToEnd ();


            for (int i = 1; i < all_text.Length; i++) {
                String tmp = conv(all_text[i]);
                bin_text += tmp;
                Console.WriteLine(tmp);
                Console.Clear();
                Console.WriteLine("{1} : {0} % ", i /(all_text.Length/100),fl_end_name);

            }
            reader.Close();
        
            using (StreamWriter outfile = new StreamWriter(fl_end_name))
            {
                outfile.Write(bin_text);
                outfile.Close();
            }
        }

        static String conv (char sym)
        {
            String value = Convert.ToString (sym, 2);
            int l = value.Length;
            for (int i = 0; i < (14 - l); i++) value = "0" + value;
            return value;
        }
    }
}

У нас есть функция которая открывает текстовый файл и читает из него с заданной кодировкой все символы, после чего переводить эти символы в бинарное представление и сохраняет файл, для танкистов, эта функция static void convert (String fl_name,String fl_end_name).

Строчкамиvar t1 = new Thread (() => convert("...","...")); //Создаем первый поток
            var t2 = new Thread (() => convert("...","...")); //Создаем второй поток
            t1.Start(); //Запускаем первый поток
            t2.Start(); //Запускаем второй поток

Вся соль в () => который и говорит JIT компилятору, что это лямбда выражение.

А потом, все по старинке, запустили и ждем результат.

Дополнительные плюшки:

  • Потоковое чтение/запись текстового файла
  • Преобразование символов в бинарный код

Плюшка первая:

Акт первый - чтение:

StreamReader reader = new StreamReader (fl_name, Encoding.GetEncoding ("windows-1251"));
all_text = reader.ReadToEnd ();
reader.Close(); //Незабываем закрывать, после прочтения, файлы

Акт второй - запись:

using (StreamWriter outfile = new StreamWriter(fl_end_name))
{
    outfile.Write(bin_text);
    outfile.Close();}

Преобразование символов в бинарный код:

static String conv (char sym)
        {
            String value = Convert.ToString (sym, 2);
            int l = value.Length;
            for (int i = 0; i < (14 - l); i++) value = "0" + value;
            return value;
        }

Удачной разработки, Сургай Владимир.

P.S.: Если Вас заинтересовали лямбда-выражения, Вы с легкостью найдете информацию о них в Википедии или в любой специализированной книге.




Похожие статьи: