1

Тема: Як обробити якусь інфу в іншому потоці, а потім повернути її?

Добрий день. Ну от я  знаю, як працювати з асинхронними сокетами, тому що там є спеціальні методи для цього. А як асинхронно працювати з довільною задачею? Наприклад, в textBox1 є якийсь текст, мені треба асинхронно опрацювати його, наприклад, додати до поточного тексту строку - "вологі пісечки", потім повернути нову строку з метода, котрий виконувався асинхронно і заперти цю строку в textBox2.
Я сьогодні возився зі всякими делегатами, Thread'ами та BeginInvoke, але це не дало бажаного результату. На якомусь форумі вичитав, що замість Thread зараз використовують Task, а ще я чув щось про події, але так і не розібрався з цим всім.
Що, взагалі, більш практично та вірно використовувати для виконання якогось метода в окремому потоці, і щоб можна було запихати в нього вхідні дані та отримувати результат в основному потоці?

2 Востаннє редагувалося FakiNyan (06.10.2013 13:28:00)

Re: Як обробити якусь інфу в іншому потоці, а потім повернути її?

ФУУУУУУУУУУУУУХ. Отаке працює, але не знаю, чи асинхронне воно, зара впихну туди ще Thread.Sleep і первірю

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace events
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
           
      
        }

        private Task<string> myTask(string s)
        {
            return Task<string>.Factory.StartNew(() => ForAction(s));

        }

        private string ForAction(string s)
        {
            return s+" вологі пісечки";
        }

        private async void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text = await myTask(textBox1.Text);
        }
    }
}

upd: нє, ніфіга воно не асинхронне, головний потік блокується

3

Re: Як обробити якусь інфу в іншому потоці, а потім повернути її?

бикграундворкер якийсь є, він має дапамагти

4

Re: Як обробити якусь інфу в іншому потоці, а потім повернути її?

ОХОХОХОХО УНЯНЯНЯНЯ!! От воно як! жодного глюка після натиснення на кніпочку!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace events
{
    public partial class Form1 : Form
    {
     

        public Form1()
        {
            InitializeComponent();
           
      
        }

      

        private void button1_Click(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync(textBox1.Text);
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            string s =(string) e.Argument;
            Thread.Sleep(4000);
            s += " вологі пісечки";
            e.Result = s;

        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            string s = (string) e.Result;
            textBox2.Text = s;
        }
    }
}

5

Re: Як обробити якусь інфу в іншому потоці, а потім повернути її?

Що це було?..

6

Re: Як обробити якусь інфу в іншому потоці, а потім повернути її?

Bartash написав:

Що це було?..

Місцевий привид. Криваві плями в наявності.

7

Re: Як обробити якусь інфу в іншому потоці, а потім повернути її?

то я тіпо радий