2012-04-20 1 views
0

내가 WinRT 일부 C# .NET 코드를 포팅하고 있는데 다음과 같은 대체하는 방법을 알아내는 데 문제가 있어요 기다립니다 :/정지를 시작하는 방법/스레드

bool threadDone = false; 
Thread updateThread = null; 

void StartUpdateThread() { 
    threadDone = false; 
    updateThread = new Thread(new ThreadStart(SendUpdateThread)); 
    updateThread.Start(); 
} 

void StopUpdateThread() { 
    if (updateThread == null) return; 
    threadDone = true; 
    updateThread.Join(); 
    updateThread = null; 
} 

void SendUpdateThread() { 
    while(!threadDone) { 
    ... 
    Thread.Sleep(...); 
    } 
} 

대체 할 수있는 가장 좋은 방법은 무엇입니까 이 WinRT. ThreadPool.RunAsync (...)를 실행하여 코드를 실행 해 보았습니다. 그러나 StopUpdateThread에서 완료를 기다리는 가장 좋은 대기 시간은 확실하지 않습니다. 또한 스레드 함수에서 수면을 바꾸려면 어떻게해야합니까? 대신 await - 우리가 C# 5 GUI 응용 프로그램을 얘기하고 있기 때문에 당신은 아무것도를 차단하고 Task들과 async을 사용하지 않은 경우

+2

스레딩이 작동하지 않습니다! 긴 라이브 스레딩! –

+0

그럼 대체할까요? 기본적으로 주기적으로 (N 밀리 초마다) 업데이트를 보내려고합니다. WinRT로이 작업을 수행하는 더 좋은 방법이 있습니까? –

+0

사소한 비동기/대기 응답을 얻는 것은 자세한 정보 없이는 대답하기 어려운 질문입니다. 누구에게 업데이트를 보냅니 까? 예기치 않게 삭제 표시 또는 종료 될 때 당신은 무엇을합니까? –

답변

2

, 아마 가장 좋은 것입니다. 즉,이 같은 것을 볼 수 있었다 :

올바르게 코드를 사용하는 그러나
// I think this field needs to be volatile even in your version 
volatile bool taskDone = false; 
Task updateTask = null; 

void StartUpdateTask() { 
    taskDone = false; 
    updateTask = Task.Run(SendUpdateTask); 
} 

async Task StopUpdateTask() { 
    if (updateTask == null) return; 
    taskDone = true; 
    await updateTask; 
    updateTask = null; 
} 

async Task SendUpdateTask() { 
    while (!taskDone) { 
    ... 
    await Task.Delay(…); 
    } 
} 

, 당신은 실제로 async 이해하는 것이 필요 - 당신이 그것에 대해 읽어해야하므로, await는 않습니다.

또한 정확하게 필요한 것은 아니 겠지만 질문에있는 정보만으로는 알기가 어렵습니다.

+0

휘발성 제안에 감사드립니다. –

+0

하나의 사소한 일, 컴파일하려면 다음을 수행해야했습니다. updateTask = Task.Run ((Func ) SendUpdateThread); –

관련 문제