Многопоточные приложения

Я читал статьи о MSDN, но мой ум мертв (это обычно происходит, когда я прочитал MSDN (Никакое преступление, MSDN, но Ваши статьи время от времени смущает меня.)), и я пытаюсь сделать некоторую "фоновую работу" в моем приложении, но не уверенный как. Это - просто отдельный метод. Но приложение зависает, и я должен дождаться к 1 - 3 минутам для него для становления... неповешенным?

Есть ли какие-либо простые примеры, которые кладут вокруг онлайн где-нибудь, что я могу взглянуть на приблизительно с?

Спасибо всем

6
задан 9 May 2010 в 05:33
поделиться

3 ответа

Уже существует этот достойный вопрос с множеством ссылок на статьи, которые легче усваиваются, чем MSDN.

Статья Джона Скита - самая простая и, вероятно, самая исчерпывающая для начала, а серия Джо Даффи очень глубока. Просмотр тегов C # и многопоточности в Stackoverflow также даст вам несколько хороших ответов.

Вы можете избежать BackgroundWorker самым быстрым способом начать работу и просто использовать Invoke:

void ButtonClick(object sender,EventArgs e)
{
    Thread thread = new Thread(Worker);
    thread.Start();
}

void Worker()
{
    if (InvokeRequired)
    {
        Invoke(new Action(Worker));
        return;
    }

    MyLabel.Text = "Done item x";
}

Некоторым людям нравится использовать BackgroundWorker в Stackoverflow, другим - нет (я в лагере номер 2).

0
ответ дан 17 December 2019 в 07:01
поделиться

Дарин уже рассказал вам теорию.

Но вам стоит ознакомиться со статическим методом ThreadPool.QueueUserWorkItem. Он более удобен.

0
ответ дан 17 December 2019 в 07:01
поделиться

Джон Скит написал хорошее введение в многопоточность в .NET , которое вы могли бы прочитать. Он также охватывает многопоточность в WinForms . Это может быть между строк:

public partial class Form1 : Form
{
    private BackgroundWorker _worker;

    public Form1()
    {
        InitializeComponent();
        _worker = new BackgroundWorker();
        _worker.DoWork += (sender, e) =>
        {
            // do some work here and calculate a result
            e.Result = "This is the result of the calculation";
        };
        _worker.RunWorkerCompleted += (sender, e) =>
        {
            // the background work completed, we may no 
            // present the result to the GUI if no exception
            // was thrown in the DoWork method
            if (e.Error != null)
            {
                label1.Text = (string)e.Result;
            }
        };
        _worker.RunWorkerAsync();
    }
}
4
ответ дан 17 December 2019 в 07:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: