혹시 써먹을 일 있나.. 싶어서 뚝딱 만들었음 ㅎㅎ

뿌리는 김에 내 어플 광고도 ㅎㅎ

다운 받으실 분들은 받으시고~

공부하실 분들은.. 뭐 너무 간단하지만 보시고 ㅋㅋ


아래 코드요~

더보기






 





또 다른 인기 어플! 겁나 그럭저럭 어려운 퍼즐!

Gem Master! The most difficult puzzle!


다운로드 :  http://itunes.apple.com/us/app/gem-master!-lite/id499444540?mt=8
신고
Posted by ParkPill 박필


간혹 쓰래드 안에서 혹은! 동적으로 만들어진 컨트롤이 다른 윈도우 컨트롤의 모양(레이아웃)을 건드리려 한다면!!

다음과 같은 에러가 발생한다. 

 System.UnauthorizedAccessException: Invalid cross-thread access

혹은

Cross-thread operation not valid: blah blah blah :p

그럴땐 어찌하는냐!! 

Delegate를 써야한다.

윈도우 컨트롤에게 InvokeRequired라는 걸로 이렇게 물어본다.

"내가 니 몸뚱이 색깔 좀 바꿀려는데 좀 기다릴까?"

그러면 InvokeRequired가  true/false로 대답해 줄 것이다. ㅋㅋ

허나 질문에 주의하라! true면 기다리라는 것이므로 Delegate로 하나 더 날려준다.

그리고 false가 나오면 바꾸면 된다.

InvokeRequired는 바꾸려는 컨트롤의 것을 사용해야한다. 

아래의 경우 패널을 바꾸기 위해 사용한 것. 그러므로 InvokeRequired는 패널에게 물어본다. 

코드는 아래와 같다.

        private Command PopupInvoke(Popup popup, ScreenPanel pnl)
        {
            if (pnl.InvokeRequired)
            {
                InvokeDelegate<Popup, ScreenPanel> id = new InvokeDelegate<Popup, ScreenPanel>(PopupInvoke);
                pnl.Invoke(id, new object[]{popup, pnl});
            }
            else
            {
                popup.Size = pnl.Size;
                pnl.Location = new Point(0, 0);
                pnl.Parent = popup.pnlPopup;

                popup.ShowDialog();
            }
            return null;
        }

신고
Posted by ParkPill 박필