이 문제는 다른 스택 오버플로 질문과 비슷합니다. How to kill a thread instantly in C#? 이 질문은 문제를 설명하고 비슷한 문제에 대한 해결책을 제시하는 좋은 방법입니다. 내 문제는 코드가 이벤트 중심적이고 루프에서 실행되지 않는다는 것입니다.이벤트를 수신하는 스레드를 닫는 적절한 방법은 무엇입니까
응용 프로그램을 닫을 때 오류를 수정하려고합니다. 응용 프로그램은 이벤트를 수신하는 스레드에서 인스턴스화 된 클래스를 가지며, 이벤트를 수신하면 일부는 작동하고 계속 청취합니다. 이러한 이벤트는 세션 당 한 번 또는 수천 번 발생할 수 있습니다. 이 모든 것이 잘 작동합니다.
이 스레드는 주 응용 프로그램의 생성자에서 시작되며 응용 프로그램이 닫힐 때만 종료되어야하며 스레드가 정지 한 시간의 절반이며 작업 관리자를 통해 닫아야합니다. 앱이 다운됩니다.
이 스레드를 종료하는 올바른 방법은 무엇입니까?
Public Main_App_Constructor()
{
...
usrIface = new UserInterface();
usrIface.Start();
...
}
private void Application_Exit(object sender, ExitEventArgs e)
{
...
usrIface.Stop();
...
}
Public class UserInterface
{
CommandListener listener;
Thread listnerThread;
Public UserInterface()
{
listener = new CommandListener();
listnerThread = new Thread(new
ThreadStart(listner.BeginListneingForEvents));
listnerThread.SetApartmentState(ApartmentState.STA);
listnerThread.Name = "Listner";
}
Public void Start()
{
listnerThread.Start();
}
Public void Stop()
{
listnerThread.Abort();
}
}
Public class CommandListener
{
EventLauncher eventer;
Public CommandListener()
{
eventer = new EventLauncher();
eventer.event1 += eventer_event1;
eventer.event2 += eventer_event2;
eventer.event3 += eventer_event3;
...
}
private void eventer_event1(object sender, eventArgs e)
{
//Does stuff
}
private void eventer_event2(object sender, eventArgs e)
{
//Does stuff
}
private void eventer_event3(object sender, eventArgs e)
{
//Does stuff
}
}
나는 나의 질문이 참조 된 것과 다른 점을 분명히했다. 동일하면 다른 스레드의 솔루션을 구현하는 방법을 명확히하십시오. – TTalma