프로그램
C# 크로스 스레딩 문제 - 다른 스레드가 이개체를 소유하고 있어 호출한 스레드가 해당 개체에 액세스 할 수 없는 문제
>동네청년<
2011. 4. 8. 11:14
휴우... 제목이 엄청길다.
내 블로그 이외에도 이 내용으로 많은 자료가 이미 많이 올라와있지만
프로그램 할때마다 필요한데 내 머리는 외워주지를 않아서 결국 포스팅 해버리게 되었다.... 매번 소스찾기가 귀찮아서.ㅠㅠ
이 코드가 필요한 경우를 예를 들면,
데이터를 송수신 하는 다중 스레드 프로그램이 있는데
데이터를 수신하는 스레드에서 프로그램 화면을 갱신하려고 하면 바로 이 글 제목같은 문제가 발생한다.
그래서 대리자를 통하여 스레드간의 자원을 공유할 수 있도록 해주어야 한다.
간단한 코드이지만 이상하게도 외어지지가 않는다ㅠㅠ
코드 설명을 하고자 쓰는 글이 아닌지라... 혹시 설명이 필요하신 분은 댓글 달아주시길...
- * WPF의 경우의 예
using System.Windows.Threading; //using을 먼저 해주고...
...
public delegate void ThisDelegate(); //클래스의 맴버 변수로 delegate 선언만 해둔다..
public partial class Window1 : Window
{
...
reader.Dispatcher.Invoke(DispatcherPriority.Normal, (ThisDelegate)delegate()
{
box.Stroke = Brushes.Black;
});
- 일반 Windows Form 응용프로그램의 예
if (this.textBox_log.InvokeRequired)
{
this.textBox_log.Invoke((MethodInvoker)delegate
{
this.textBox_log.Text += DateTime.Now.ToString() + " : " + msg + "\r\n";
this.textBox_log.SelectionStart = this.textBox_log.TextLength;
this.textBox_log.ScrollToCaret();
});