Non puoi inserire una critical section (ossia un blocco lock) dal controllo "Porta.IsOpen" all'apertura vera e propria della porta?