C # Ожидание окончания делегата, прежде чем продолжить

1

Мне нужно получить доступ к элементу управления DataGridView из потока aa, отличного от потока, на котором он был создан. Я читал, что должен использовать делегат, и он работает, но мне нужно дождаться завершения делегирования, прежде чем продолжить в потоке. Я попытался вызвать EndInvoke после BeginInvoke, но поток продолжается.

public void ArrangeGrid()
{
    ArrangeGridHandler ag = ArrangeGridAsync;
    IAsyncResult result = ag.BeginInvoke(cb, null);
    ag.EndInvoke(result);
}

Когда я вызываю ArrangeGrid() поток продолжается, даже если он еще не закончен. Как я могу сделать? Благодарю!

  • 0
    Delegate.BeginInvoke не вызывает его в вашей ветке графического интерфейса. Попробуйте Control/Form.Invoke(...); , Это выполнит это на правильном потоке так же как ожидании завершения.
Теги:
delegates
multithreading
asynchronous
datagridview

1 ответ

2
Лучший ответ

при использовании метода Async для вас будет создан новый поток.

Попробуйте использовать Invoke

 public void ArrangeGrid()
    {          
         if(this.InvokeRequired) 
          { 
             Action  arrange = ArrangeGrid ;  
               this.Invoke(arrange); 
          }
          else
          {  
            //insert your code here  
          }
    }
  • 0
    Это работает, только если я выполняю шаг за шагом, иначе поток, кажется, не ждет завершения ArrangeGrid .
  • 0
    Это работает, был другой метод, вызванный ранее, который имел ту же проблему. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню