Я пишу программу 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' событие будет поднят на? Это не может быть вашим вторичным потоком, так как вам явно не нужно блокировать его. Должен ли он быть основным потоком, или вы в порядке, когда он поднимается на другой поток, недавно созданный только для асинхронного обратного вызова? –