Puedo usar el siguiente código para acceder a las propiedades en mi formulario,pero hoy me gustaría escribir cosas a un ListView,que requiere más parámetros.

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

Cómo agregar más de un parámetro y cómo usarlos(valor,valor)?

OriginalEl autor Ivan Prodanov | 2009-04-08

2 Comentarios

  1. 28

    (editar – creo que no he entendido la pregunta original)

    Simplemente que sea un método en lugar de una propiedad:

    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);
    }

    OriginalEl autor Marc Gravell

  2. 0

    Genéricamente, se puede hacer como sigue

    • En C# 2012/Net 4.5 Crear una Aplicación de Windows Forms proyecto llamado Lambda1
    • En el Formulario Form1, inserte una Etiqueta llamada label1
    • Presione F4 para abrir las propiedades de Form1 (no el label1 propiedades)
    • Haga clic en la vista de Eventos (Icono con un rayo)
    • Haga doble clic en el Formulario de Cierre del evento. Un controlador de eventos será creado.
    • No de la mente sobre el controlador de eventos por ahora. Será sustituido por otro posterior;
    • Seleccionar y borrar todo el código en un Formulario.cs (Ctrl-A/tecla de Borrar)
    • Copie y pegue el siguiente código de 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;
        }
    }
    
    }

    Lo que este código es:

    Un temporizador es creado. Transcurrido El Controlador De Eventos

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

    será llamado cada 1000ms

    El label1.El texto será actualizado en el interior de este controlador de eventos. Sin Invocar, habrá un hilo emitido

    Para actualizar el label1.Texto con un nuevo valor, el código fue utilizado


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

    Por favor ver que c y d son los que se pasa como argumento para x1 y x2 en la función Invoke y x1 es devuelto por la llamada de invocación.

    La variable d se inserta en este código sólo para mostrar cómo pasar más de una variable cuando se Invoca se llama.

    OriginalEl autor Antonio Leite

Dejar respuesta

Please enter your comment!
Please enter your name here