저는 응용 프로그램을 작업하고 있는데 TeamViewer와 Radmin을 통해 원격으로 연결할 때 응용 프로그램이 멈 춥니 다.
중지되면 예외가 없으며 UI가 응답하지 않으며 프로세스가 리소스 모니터 또는 프로세스 탐색기에서 중단되지 않습니다.
응용 프로그램의 몇 가지 기본 사양 : 2 개의 COM 포트에 연결합니다. 하나는 입력 용이고 다른 하나는 출력용입니다. 출력 COM에는 5 초마다 연결 유지 신호도 필요합니다. UI 업데이트부터 음성 출력 및 데이터 입력 처리까지 다양한 작업을 실행하는 4 개의 백그라운드 작업자 스레드가 있습니다. UI는 3 개의 개별 데이터 소스의 데이터를 실시간으로 표시합니다. 두 개는 COM 포트이고 하나는 MS SQL입니다.
RDP는 응용 프로그램을 전혀 중단하지 않습니다.
이 문제의 원인에 대한 아이디어가 있습니까?
SQL 2012 백엔드와 함께 VS Ultimate 2013에 내장 된 .NET 4.5.1에서 실행됩니다.
나는 진전없이 64 비트와 32 비트 사이를 바꾸려고 시도했다.
fsintegral에 대한 응답을 편집 하십시오.
타이머는 끝없이 실행되도록 설계되었지만 무한 루프와는 다릅니다.
보이지 않는 대화 상자를 확인하는 방법이 있습니까? 나는 존재한다고 생각하지 않지만 확인하는 방법을 알고 싶습니다.
저는 백그라운드 작업 자당 데이터로드 시간을 최적화하는 데 상당한 시간을 보냈고 데이터로드를 위해 각 프로세스를 1 초 미만으로 줄였습니다. 프로세스 중 하나가 더 오래 실행되는 원인은 두 가지입니다. 그중 하나는 SpeachSynth를 사용하여 경고를 말하고 있으며 코드 블록 당 최대 60 초가 걸릴 수 있습니다. 다른 하나는 시간 초과가 발생하는 경우 응용 프로그램이 중단되지 않도록 비동기 프로세스에 넣은 전자 메일입니다. 그러나이 두 항목이 처리되지 않는 경우에도 응용 프로그램이 중단됩니다.
계단식 이벤트. 다른 이벤트에 의해 트리거되는 이벤트입니까? 그렇다면 응용 프로그램은 이러한 유형의 작업을 사용하지 않습니다. 그러나 응용 프로그램은 적어도 하나의 백그라운드 작업자에서 약 15 개의 개별 모듈을 호출합니다. 나는 이것이 너무 높은 숫자라고 생각하지 않지만 그것이 있다면 알려주십시오. 이것이 우려된다면 의사 코드를 게시 할 수 있습니다.
Application.Sleep ()은 사용되지 않지만 Application.DoEvents ()는 일정 시간이 지나기를 기다릴 때입니다.
IE
Dim startTime As Date = Now
Dim timePassed As TimeSpan = Now - startTime
Do Until timePassed.TotalSeconds > 5
timePassed = Now - startTime
Application.DoEvents()
Loop
모호한 주된 이유는 응용 프로그램의 항목 유형에 따라 TeamViewer 또는 Radmin에서이 문제가 알려지기를 바 랐기 때문입니다. IE SQL 버전, COM 포트 및 BW.
미리 감사드립니다.
확인. 나는 그것을 알아.
기본적으로 문제의 원인은 이러한 원격보기 응용 프로그램이 .NET 응용 프로그램의 UI에 미치는 영향입니다.
내 애플리케이션에는 앱 내의 다양한 스레드에서 업데이트되는 두 개의 텍스트 상자가 있습니다. 다음 코드를 사용하여 텍스트를 업데이트했습니다. .Invoke 메서드가 문제였습니다.
Delegate Sub SetTextCallback(ByVal [text] As String, ByRef txtHomeActiveDataStream As TextBox, ByVal type As String)
Public Sub ReceivedText(ByVal [text] As String, ByRef txtHomeActiveDataStream As TextBox, ByVal type As String) 'input from ReadExisting
Dim receivedString As String = text
Dim currentText As String
If txtHomeActiveDataStream.InvokeRequired Then
Dim x As New SetTextCallback(AddressOf ReceivedText)
txtHomeActiveDataStream.Invoke(x, New Object() {(text), txtHomeActiveDataStream, type})
Else
txtHomeActiveDataStream.Text &= receivedString
End If
End Sub
메서드를 .Invoke에서 .BeginInvoke로 변경하여 응용 프로그램이 중단되는 것을 방지 할 수있었습니다. 이는 .Invoke가 출시되기 전에 UI 로의 포스트 백이 필요하고 TeamViewer가 포스트 백이 UI로 다시 전송되지 않는 방식으로 UI를 잡았 기 때문입니다. BeginInvoke를 사용하면 포스트 백이 무시되므로 TeamViewer에서 더 이상 무기한 중단되지 않습니다.
windbg에 대한 정보에 감사드립니다. 하지만 보내 주신 기사에 따라 실행할 수 없었습니다. 결국 ProcessExplorer를 사용하고 코드가 걸려있는 줄을 찾기 위해 덤프 파일을 만들었습니다. 디버그 모드에서 VS 2013을 사용해 보았지만 디버그에서 실행하는 동안 응용 프로그램이 멈추지 않습니다. 그림을 이동.
입력 해 주셔서 감사합니다. 앞으로 다른 사람에게 도움이되기를 바랍니다. 나는이 문제에 대해 기꺼이 인정하는 것보다 더 많은 시간을 보냈으며 그 문제를 해결하게되어 기쁩니다.
추가 의견이 있으면 알려주십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다