Port_DataReceived, очевидно, является асинхронным обработчиком событий, который вызывается потоком в компоненте мониторинга портов.
есть ли новый поток для каждого
вызов делегата?
Нет, наверное нет. Ваш компонент мониторинга портов выполняет опрос в фоновом потоке, и событие вызывается из этого потока каждый раз.
Дело в том, что он вызывается в потоке, отличном от пользовательского интерфейса, поэтому вам нужно будет использовать Control.Invoke и шаблоны, связанные с ним.
Подумайте об этом (и прочитайте пост , который может пролить свет на вас)
void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//this call delegate to display data
UpdateTheUI(statusMsg);
}
private void UpdateTheUI(string statusMsg)
{
if (lblMsgResp.InvokeRequired)
{
lblMsgResp.BeginInvoke(new MethodInvoker(UpdateTheUI,statusMsg));
}
else
{
clsConnect(statusMsg);
}
}
С учетом всего сказанного я был бы упущен, если бы не указал, что косвенность вызывает беспокойство.