코드를 번갈아 실행하고 싶습니다. 그래서 어느 순간에 실행을 중단 할 수 있습니다. 이 코드는 안전한가요?스레드를 번갈아 실행하는 안전한 방법입니까?
static class Program
{
static void Main()
{
var foo = new Foo();
//wait for interaction (this will be GUI app, so eg. btnNext_click)
foo.Continue();
//wait again etc.
foo.Continue();
foo.Continue();
foo.Continue();
foo.Continue();
foo.Continue();
}
}
class Foo
{
public Foo()
{
new Thread(Run).Start();
}
private void Run()
{
Break();
OnRun();
}
protected virtual void OnRun()
{
for (var i = 0; i < 5; i++)
{
Console.WriteLine(i);
Break();
}
//do something else and break;
}
private void Break()
{
lock (this)
{
Monitor.Pulse(this);
Monitor.Wait(this);
}
}
public void Continue()
{
lock (this)
{
Monitor.Pulse(this);
Monitor.Wait(this);
}
}
}
당연히 알겠지만 이제는 응용 프로그램이 끝나지 않을 것이지만 그 점은 중요하지 않습니다.
어떤 종류의 알고리즘에 단계를 제시하고 특정 순간에 무슨 일이 일어나고 있는지 설명하고 하나의 스레드에서 모든 것을 만들어 내면 작은 양의 루프를 사용할 때도 많은 문제가 발생할 수 있기 때문에이 코드가 필요합니다. 코드. 예를 들어 그 라인 :
for (var i = 0; i < 5; i++)
{
Console.WriteLine(i);
Break();
}
은 다음으로 대체해야합니다
if (this.i < 5)
{
Console.WriteLine(i++);
}
그리고 내가 선물하고 싶은 단지 작은 예입니다. 코드는 더미 for
루프보다 복잡합니다.
이상합니다. 스레드를 사용하지 마십시오. –
@ 한스 패 탄트 : 어떻게 이런 종류의 코드를 설명하겠습니까? 'OnRun'의 내부에서 나는 그래프 관련 알고리즘을 실행하고이 순간에 무슨 일이 일어나고 있는지에 대한 사용자 설명을 보여주고 싶습니다.메시지와 꼭지점/가장자리 채색. 그런 일을 작은 조각으로 나누면 코드 작성이 힘들어집니다. – prostynick
질문에 대한 대답은 Windows Forms 용 UI 스레딩 모델에 익숙하지 않은 것처럼 보입니다. 어떤 별도의 백그라운드 스레드로 "대체"해야하는 이벤트로 수행 할 수없는 작업을 설명해야합니다. – David