日期:2014-05-17  浏览次数:20968 次

C#下类中 访问窗体控件的问题

一般来讲我们都已经习惯了把单一的功能块都写到类里边了,然后在软件的主线程中调用一下类中的函数所有功能就都实现了,但是有些系统,比如说某一些监控类的系统,需要我们在类中进行操作的同事呢把一些实时数据展示出来,这个时候就需要在类中调用主线程中的控件了。从网上找了找没有找到很好的办法,就自己写了一个。可以用的。我把代码粘出来,有问题的请留言!


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace 类访问窗体控件
{
    public partial class Form1 : Form
    {
       
        public Form1()
        {
            InitializeComponent();
           
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Btn_Do_Click(object sender, EventArgs e)
        {
            class1 c1 =new class1();
            System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(c1.SetLableText));
            t.IsBackground = true;
            t.Start();
        }
    }
    public class class1
    {
       
        public delegate void DelegateSetLableText(Label lable, string Str_Text);

        public void FunctionSetLableText(Label lable, string Str_Text)
        {
            lable.Text = Str_Text;
        }
        public void SetLableText()
        {
            object[] myArray = new object[2];
            myArray[0] = (Application.OpenForms["Form1"].Controls["label1"] as Label);
           
            for (int i = 0; i < 10000; i++)
            {
                myArray[1] = DateTime.Now.ToString();
                (Application.OpenForms["Form1"].Controls["label1"] as Label).BeginInvoke(new DelegateSetLableText(FunctionSetLableText), myArray);
                System.Threading.Thread.Sleep(1000);
            }
        }
    }
}