2009-04-08 2 views
11

아래 코드를 사용하여 양식의 속성에 액세스 할 수 있지만 오늘은 더 많은 매개 변수가 필요한 ListView에 내용을 쓰고 싶습니다.C# 두 개 이상의 매개 변수로 호출하는 방법

public string TextValue 
    { 
     set 
     { 
      if (this.Memo.InvokeRequired) 
      { 
       this.Invoke((MethodInvoker)delegate 
       { 
        this.Memo.Text += value + "\n"; 
       }); 
      } 
      else 
      { 
       this.Memo.Text += value + "\n"; 
      } 
     } 
    } 

어떻게 둘 이상의 매개 변수를 추가하고 사용하는 방법 (값, 값)? -

답변

27

는 단순히 대신 재산의 방법을 만들어 (편집 나는 내가 원래의 질문 오해 생각) :

public void DoSomething(string foo, int bar) 
{ 
    if (this.InvokeRequired) { 
     this.Invoke((MethodInvoker)delegate { 
      DoSomething(foo,bar); 
     }); 
     return; 
    } 
    // do something with foo and bar 
    this.Text = foo; 
    Console.WriteLine(bar); 
} 
0

일반적를

    를 따를 때, 당신은 할 수있다
  • C# 2012/Net 4.5에서 Lambda1이라는 Windows Forms 응용 프로그램 프로젝트 만들기
  • In For M1 양식으로 Form1 속성 (안 LABEL1 속성) 이벤트에
  • 클릭 볼 (천둥과 아이콘) 폼 닫기 이벤트에
  • 더블 클릭을 열
  • F4를 눌러를 LABEL1이라는 라벨을 삽입합니다. 이벤트 핸들러가 생성됩니다.
  • 지금 이벤트 처리기에 대해 신경 쓰지 마십시오. 나중에 다른 것으로 대체 될 것입니다.
  • Form.cs에서 모든 코드를 선택하고 지우십시오 (Ctrl-A/Delete 키)
  • 다음 코드를 복사하여 Form1.cs에 붙여 넣으십시오.
    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Linq; 
    using System.Linq.Expressions; 
    using System.Text; 
    using System.Threading; 
    using System.Threading.Tasks; 
    using System.Windows.Forms; 
    using System.Diagnostics; 
    namespace Lambda1 
    { 
    public partial class Form1 : Form 
    { 
    
        System.Timers.Timer t = new System.Timers.Timer(1000); 
        Int32 c = 0; 
        Int32 d = 0; 
        Func<Int32, Int32, Int32> y; 
    
        public Form1() 
        { 
    
         InitializeComponent();   
         t.Elapsed += t_Elapsed; 
         t.Enabled = true; 
        } 
    
        void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
        { 
         c = (Int32)(label1.Invoke(y = (x1, x2) => 
           { label1.Text = (x1 + x2).ToString(); 
               x1++; 
               return x1; }, 
               c,d)); 
         d++; 
        } 
    
        private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
        { 
         t.Enabled = false; 
        } 
    } 
    
    } 
    


어떤이 코드가 수행하는 것은 :

타이머가 생성됩니다. 경과 이벤트 처리기

void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 

마다 1000MS

가 label1.Text이 이벤트 핸들러 내부에 업데이트됩니다 호출됩니다. 인보하지 않고, 새로운 값으로 label1.Text를 업데이트하려면

을 발행 한 스레드가있을 것입니다, 코드는


을 사용
c = (Int32)(label1.Invoke(y = (x1, x2) => { label1.Text = (x1 + 
x2).ToString(); x1++; return x1; }, c,d)); 

이 C와 D가되고있다 참조하십시오 Invoke 함수에서 x1 및 x2에 인수로 전달되고 x1이 Invoke 호출에서 반환됩니다.

Invoke가 호출 될 때 둘 이상의 변수를 전달하는 방법을 보여주기 위해이 코드에 변수 d가 삽입되었습니다.

관련 문제