2009-04-08 15 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フォームアプリケーションプロジェクトを作成
  • In the For M1フォームは、Form1のプロパティ(ないのLabel1のプロパティ)イベントの
  • をクリックして、表示(雷とアイコン)フォームClosingイベントに
  • ダブルクリックして開くこと
  • 押して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; 
    } 
} 

} 

何このコードがやっていることは次のとおりです。

タイマーが作成されます。ます。Label1.Textは、このイベントハンドラ内で更新されますすべての1000ミリ秒

Elapsedイベントハンドラ

void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
が呼び出されます。起動せずに、新しい値でます。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がこのコードに挿入されています。

関連する問題