Я пишу программу на Visual C #, которая выполняет непрерывный цикл операций во вторичном потоке. Иногда, когда этот поток завершает задачу, я хочу, чтобы он запускал обработчик событий. Моя программа делает это, но когда запускается обработчик событий, вторичный поток ждет, пока обработчик событий не завершит работу, прежде чем продолжить поток. Как мне сделать так, чтобы это продолжалось? Вот как я сейчас его структурирую ...
class TestClass
{
private Thread SecondaryThread;
public event EventHandler OperationFinished;
public void StartMethod()
{
...
SecondaryThread.Start(); //start the secondary thread
}
private void SecondaryThreadMethod()
{
...
OperationFinished(null, new EventArgs());
... //This is where the program waits for whatever operations take
//place when OperationFinished is triggered.
}
}
Этот код является частью API одного из моих устройств. Когда запускается событие OperationFinished, я хочу, чтобы клиентское приложение могло делать все, что ему нужно (т. Е. Соответствующим образом обновлять графический интерфейс), не нарушая работу API.
Кроме того, если я не хочу передавать какие-либо параметры обработчику событий, правильный ли мой синтаксис с использованием OperationFinished(null, new EventArgs())?
OperationFinished? Это не может быть ваш вторичный поток, поскольку вы явно не требуете его блокировать. Должен ли он быть основным потоком, или вас устраивает, что он поднимается в другом потоке, созданном только для целей асинхронного обратного вызова? - person Pavel Minaev   schedule 16.12.2009