В асинхронном вызове OnMsgRecieved, если я назначаю значение непосредственно элементу управления, он не работает. Затем я узнал, что это связано с тем, что поток небезопасен, и я получил следующий код для решения проблемы. Теперь он работает. Но я не уверен, что он делает практически. Может ли кто-нибудь заставить меня полностью его понять? Код: - УправлениеЧто именно происходит с потоками окон?
public void listener_OnMsgRecieved(string aResponse)
{
ShowResponseMessage(aResponse);
}
public void ShowResponseMessage(string aResponse)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.listBox.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(ShowResponseMessage);
this.Invoke(d, new object[] { aResponse });
}
else
{
this.listBox.Items.Add(aResponse);
label.Text = "Response received from Server :";
}
}
Есть ли что-то, что связано с контекстом синхронизации? – userGS
Спасибо, практическое объяснение! –