Мне нужно получить доступ к элементу управления DataGridView из потока aa, отличного от потока, на котором он был создан. Я читал, что должен использовать делегат, и он работает, но мне нужно дождаться завершения делегирования, прежде чем продолжить в потоке. Я попытался вызвать EndInvoke
после BeginInvoke
, но поток продолжается.
public void ArrangeGrid()
{
ArrangeGridHandler ag = ArrangeGridAsync;
IAsyncResult result = ag.BeginInvoke(cb, null);
ag.EndInvoke(result);
}
Когда я вызываю ArrangeGrid()
поток продолжается, даже если он еще не закончен. Как я могу сделать? Благодарю!
при использовании метода Async для вас будет создан новый поток.
Попробуйте использовать Invoke
public void ArrangeGrid()
{
if(this.InvokeRequired)
{
Action arrange = ArrangeGrid ;
this.Invoke(arrange);
}
else
{
//insert your code here
}
}
ArrangeGrid
.
Control/Form.Invoke(...);
, Это выполнит это на правильном потоке так же как ожидании завершения.