Как переделать метод в асинхронный (C#)

188
17 апреля 2018, 01:59

Как сделать метод Run() из SendStream.cs асинхронным или запуск sendStream.Run(); в Main.cs асинхронным? Цикл в методе должен работать бесконечно, return и break не предлагать.

Код: Main.cs

public MainWindow()
{
    InitializeComponent();
    SendStream sendStream = new SendStream();
    sendStream.Run();
}

Код: SendStream.cs

public class SendStream
    {
        private IPEndPoint ipEndPoint;
        private UdpClient _udpClient;
        private int width;
        private int height;
        private const UInt16 UdpSize = 65507;
        private const UInt16 ControlBlockSize = 5;
        private Random random = new Random();
        private byte lastA = 0;
        private byte lastB = 0;
        private float FPS = 60;
        public SendStream()
        {
            using (StreamReader streamReader = new StreamReader("ip.txt"))
            {
                string ip = streamReader.ReadLine();
                int port = Convert.ToInt32(streamReader.ReadLine());
                if (ip != null) ipEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);
            }
            width = Screen.PrimaryScreen.Bounds.Width;
            height = Screen.PrimaryScreen.Bounds.Height;
        }
        public void Run()
        {
            _udpClient = new UdpClient();
            Bitmap backGround = new Bitmap(width, height);
            Graphics graphics = Graphics.FromImage(backGround);
            while (true)
            {
                System.Threading.Thread.Sleep((int) (1000 / FPS));
                graphics.CopyFromScreen(0, 0, 0, 0, new System.Drawing.Size(width, height));
                byte[] bytes = ConvertToByte(backGround); 
                List<byte[]> data = Package(bytes);
                foreach (var block in data)
                {
                    _udpClient.Send(block, block.Length, ipEndPoint);
                }
            }
        }
   ...
}
Answer 1

Достаточно было сделать это))

Огромное спасибо @EvgeniyZ

Main.cs

SendStream sendStream = new SendStream();
await sendStream.Run();

SendStream.cs

public async Task Run()
        {
            _udpClient = new UdpClient();
            Bitmap backGround = new Bitmap(width, height);
            Graphics graphics = Graphics.FromImage(backGround);
            while (true)
            {
                await Task.Delay((int) (1000 / FPS)); //System.Threading.Thread.Sleep((int) (1000 / FPS));
                graphics.CopyFromScreen(0, 0, 0, 0, new System.Drawing.Size(width, height));
                byte[] bytes = ConvertToByte(backGround);
                List<byte[]> data = Package(bytes);
                foreach (var block in data)
                {
                    await _udpClient.SendAsync(block, block.Length, ipEndPoint);
                }
            }
        }
READ ALSO
WPF проверить виден ли визуальный объект

WPF проверить виден ли визуальный объект

Каким образом можно проверить что визуальный объект виден пользователю, и его необходимо отрисовать, в противном случае ничего не делать...

202
В чем моя ошибка? [Unity 3D]

В чем моя ошибка? [Unity 3D]

Есть код(длинный, потому на пастебине):

237
Работа с прокси Titanium.web.proxy

Работа с прокси Titanium.web.proxy

Как можно остановить get запрос на открытие веб-сайта, если этот сайт находится в моем black списке веб-сайтов? Используя прокси Titaniumweb

203