연습 문제로 .NET 3.5 WPF 응용 프로그램에서 백그라운드 스레드로 실행되는 카운터를 생성합니다. 카운터가 증가하고 몇 초마다 합계가 화면에 출력된다는 아이디어가 있습니다..NET에서 멀티 스레딩 - 백그라운드에서 카운터 구현
연습 문제이므로 전경 스레드는 실제로 아무 것도하지 않지만 그것이 실제로 일어난다 고 상상해보십시오!
카운터를 시작하고 중지하는 시작 및 중지 버튼이 있습니다.
문제는 포어 그라운드 스레드가 몇 초마다 총을 폴링하여 양식의 텍스트 상자에서 업데이트하도록하려는 경우입니다. 이 앱을 사용하면 전체 앱이 '응답 없음'상태가됩니다. 현재는 카운트를 시작한 후 고정 된 시간에만 업데이트하도록했습니다.
public partial class Window1 : Window
{
public delegate void FinishIncrementing(int currentCount);
private int reportedCount;
private Thread workThread;
public Window1()
{
InitializeComponent();
}
#region events
private void Window_Loaded(object sender, RoutedEventArgs e)
{
txtCurrentCount.Text = "0";
reportedCount = 0;
InitialiseThread();
}
private void btnStart_Click(object sender, RoutedEventArgs e)
{
workThread.Start();
// Do some foreground thread stuff
Thread.Sleep(200); // I want to put this in a loop to report periodically
txtCurrentCount.Text = reportedCount.ToString();
}
private void btnStop_Click(object sender, RoutedEventArgs e)
{
workThread.Abort();
txtCurrentCount.Text = reportedCount.ToString();
InitialiseThread();
}
#endregion
private void InitialiseThread()
{
WorkObject obj = new WorkObject(ReportIncrement, reportedCount);
workThread = new Thread(obj.StartProcessing);
}
private void ReportIncrement(int currentCount)
{
reportedCount = currentCount;
}
}
public class WorkObject
{
private Window1.FinishIncrementing _callback;
private int _currentCount;
public WorkObject(Window1.FinishIncrementing callback, int count)
{
_callback = callback;
_currentCount = count;
}
public void StartProcessing(object ThreadState)
{
for (int i = 0; i < 100000; i++)
{
_currentCount++;
if (_callback != null)
{
_callback(_currentCount);
Thread.Sleep(100);
}
}
}
}
내 질문은 : 어떻게 그것을 정기적으로보고받을 수 있나요, 내가하려고 할 때 왜 실패하는
난 당신이 전체 그림을 얻을 수 있도록, 여기에 모든 코드를 덤프합니다 보고를 for 루프에 넣으려면?
편집 : 내 훈련은 멀티 스레딩의 구식 방법으로 자신을 익숙하게하는 것이라고 언급 한 경우, 그래서 BackgroundWorker
을 사용할 수 없습니다!
그럼 매일 매일 새로운 것을 배웁니다. 감사합니다. –