0
내 PC에 연결된 여러 직렬 장치가 있고 사용자가 원하는 포트를 선택할 수있는 프로그램에서 일하고 프로그램을 TabPage 동적으로 만들고 TabControl 추가합니다 .Dynamicaly 만든 SerialPort 오류없이 응답하지 않습니다
각 탭 페이지에는 지정된 직렬 포트에서 들어오는 데이터를 표시하는 여러 줄 TextBox가 있습니다. 나는 단지 하나의 SerialPort
를 추가하는 경우
private void AddSerialPort(string portName)
{
var page = new TabPage(portName);
page.Text = portName;
var tb = new TextBox();
tb.Name = portName;
tb.Dock = DockStyle.Fill;
tb.BackColor = Color.Black;
tb.ForeColor = Color.White;
tb.Multiline = true;
page.Controls.Add(tb);
tabControlActiveSerialPorts.TabPages.Add(page);
//Define serial port
var sp = new SerialPort(portName, 115200, Parity.None, 8, StopBits.One);
sp.DataReceived += delegate
{
if (tb.InvokeRequired)
{
tb.Invoke(new Action(() =>
{
var incoming = sp.ReadExisting();
tb.Text += incoming;
}));
}
else
{
var incoming = sp.ReadExisting();
tb.Text += incoming;
}
};
sp.Open();
}
문제는, 잘 작동하고 텍스트 상자가 채워집니다 :
다음은 동적으로 이러한 컨트롤을 만들려고 내 코드입니다. 하지만 다른SerialPort
을 추가하자마자 몇 초가 지나면 첫 번째 또는 두 번째 추가 된 SerialPort가 작동을 멈추고 다른 하나는 여전히 작동합니다 (이것은 완전 무작위로 첫 번째 또는 두 번째 중 하나가 텍스트 상자에 데이터를 채우지 않으며 해당 없음 내 하드웨어!) 나는 그것이 무엇을 위해 지정된 텍스트 상자가 더 이상 채워지지 않을 것이라는 것을 의미한다.
디버거에서 오류가 발생하지 않습니다 ...이 작동하지 않습니다! 어떤 아이디어가 문제 일 수 있습니까?
내가 단 1 개의 시리얼 포트를 추가한다면, 괜찮습니다.
Invoke
대신 BeginInvoke
을 시도했지만 아무 것도 변경하지 않았습니다.
문제를 해결하는 것 같습니다! 나는 실제로 같은 것을하고 싶었다 : 어쨌든 D 덕분에! –