2016-12-01 5 views
1

내가 닷넷 프레임 워크 4.5가 어떻게 # 3.0

아래의 WinForm 프로그램을 만든 c를 아래 (새 조)를 호출 변경할 수 있습니다 그리고 지금은 스레드를 사용하여 닷넷 프레임 워크 3.0

아래를 만들려고 노력의 전화 DataGridView에에 "Control.Invoke"하지만, 그것은 작동하지 있어요 ..

내 코드는이

private void btnStart_Click(object sender, EventArgs e) 
    { 
     Thread th = new Thread(new ThreadStart(StartAnalyseTheSite)); 
     th.IsBackground = true; 
     th.Start(); 
    } 

    private void StartAnalyseTheSite() 
    { 
     InsertWebApplicationInfo(); 
     SelectWebApplicationInfo(); 
    } 

    private void InsertWebApplicationInfo() 
    { 
     DoSomething... 
    } 

    private void SelectWebApplicationInfo() 
    { 
     this.Invoke(new Action(() => { grdWebApplication.DataSource = dtwebApp; })); 
    } 

그리고

,369 같다

this.Invoke (새 작업()) => {grdWebApplication.DataSource = dtwebApp; })));

이 코드가 작동하지 않습니다 ...

오류 메시지입니다 ->

'액션'내가 그 코드를 변경할 수있는 방법 1 개 인자

를 사용하는 생성자를 포함하지 않는 이유는 무엇입니까? ? 누군가가 나에게 도움이

+0

당신이 그것을 작동하지 않습니다에 의해 당신이 무슨 뜻인지 명확히 할 수 있습니까? 예외가 있습니까? 그렇다면 무엇을 말할까요? 컴파일 오류가 있습니까? 다시 - 만약 그렇다면 - 무슨 말을하니? – Rob

+0

오, 죄송합니다. 감사합니다 –

답변

2

당신은 같은 코드를 사용할 수 있습니다

this.Invoke(new MethodInvoker(delegate() { /*Do sommething*/ })); 
+0

** 참고 1 : ** .NET Framework 3.0은 C# 2.0을 사용합니다. C# 2.0에는 코드 블록을 별도로 정의 된 메서드 대신 매개 변수로 전달할 수있는 익명 메서드 개념이 도입되었습니다. –

+0

** Note 2 : **'new Action (() => {/*...*/}) '에 상응하는 것을 만들려면, 먼저 위임을 이런 방법으로 생성 할 수 있습니다 :'public delegate void Action(); '그 델리게이트의 인스턴스를 생성하기 위해, 당신은이 코드를 사용할 수 있습니다 :'새로운 액션 (delegate() {/*...*/})'. 'MethodInvoker' 델리게이트는 우리가 필요로하는 서명을 가지고 있기 때문에 우리는 새로운 델리게이트를 생성하지 않고'MethodInvoker'를 사용했습니다. –

+0

레자 아가 에이 감사합니다! 코드와 설명이 완벽합니다. 나는 당신의 코멘트를 읽고 난 후에 그것을 사용할 수있는 방법을 이해했다!! –