BeginInvoke()를 호출 할 때 대리자가 메서드 호출과 동일한 순서로 다시 나타 납니까? 또는 대표단이 처음으로 돌아올 것이라는 보장이 없습니까?Control.BeginInvoke 실행 순서
public Form1()
{
InitializeComponent();
for (int i = 0; i < 100; i++)
{
Thread t = new Thread(DisplayCount);
t.Start(i);
}
}
public void DisplayCount(object count)
{
if (InvokeRequired)
{
BeginInvoke(new Action<object>(DisplayCount), count);
return;
}
listBox1.Items.Add(count);
}
정수 목록은 순서가 바뀌어 올 것입니다.
'BeginInvoke()'는 별도의 스레드에서 델리게이트를 실행합니다. 대표단이 돌아 오는 순서에 대한 보장은 없습니다. 델리게이트는 실행이 끝나면 다시 돌아올 것입니다. 즉, 델리게이트가 처음 실행 되었더라도 델리게이트가 매우 늦게 돌아 오면 아주 늦게 돌아올 것입니다. –
@Hans Jon Senchyna의 대답에 대한 내 의견을 참조하십시오. 이것은 Delegate.BeginInvoke에 대해 올바르지 만 Control.BeginInvoke에는 적합하지 않습니다. – Tergiver