객체를 생성하는 콘솔 테스트 응용 프로그램을 만들었습니다. 객체 &은 2 개의 개별 스레드에서 2 개의 함수를 호출합니다. 한 스레드는 숫자 1 - 20을 다른 순서로 역순으로 인쇄합니다.메인 스레드를 디버깅 할 때 작업 스레드가 실행되지 않는 이유는 무엇입니까?
문제점은 주 스레드의 디버깅을 중지하지 않을 때까지 (즉, f5 키를 누를 때까지) 첫 번째 작업자 스레드 디버깅이 시작되지 않는 문제입니다. 어떤 대답? 이 비주얼 스튜디오 또는 CLR의 제한이 있지만, 하나 개의 스레드에 중단 점을 설정하면 모든 스레드가 중지되고,
class Program
{
static void Main(string[] args)
{
DisplayData dd = new DisplayData();
ThreadStart ts1 = new ThreadStart(dd.DisplayNumber);
Thread t1 = new Thread(ts1);
t1.Name = "Display Numbers";
ThreadStart ts2 = new ThreadStart(dd.ReverseNumbers);
Thread t2 = new Thread(ts2);
t2.Name = "Reverse Numbers";
t1.Start(); //Keep 1st break point at this location. Then press F10.
t2.Start(); //Keep break point at this location permanently
}
public class DisplayData
{
public void DisplayNumber()
{
int length = 20;
Console.WriteLine("\nNumbers in correct order.\n");
for (int i = 0; i < length; i++)
{
Console.WriteLine("DN: The value of i is: " + (i+1) + " " + Thread.CurrentThread.ManagedThreadId + " " + Thread.CurrentThread.Name);
//Thread.Sleep(1000);
}
}
public void ReverseNumbers()
{
int length = 20;
Console.WriteLine("\nNumbers in reverse order.\n");
for (int i = 0; i < length; i++)
{
Console.WriteLine("RN: The value of i is: " + (length - i) + " " + Thread.CurrentThread.ManagedThreadId + " " + Thread.CurrentThread.Name);
//Thread.Sleep(1000);
}
}
sDisplayNumber와 ReverseNumbers는 어떻게 생겼습니까? –
한 가지 문제점은 스레드를 시작할 때 t2.Start()로 내려 가면 t1이 아직 시작되지 않았을 수도 있지만 그 행에서 일시 중지 중이므로 아무 일도 일어나지 않을 것이라는 보장이 없다는 것입니다. t1.Start()와 t2.Start() 사이에 줄을 삽입하면 스레드가 시작되었는지 확인한 다음 t2를 시작하면 더 잘 작동합니다. –
t1.Start() & t2.Start (0에서 t1까지) 사이에 Console.ReadKey()를 입력하면 –