C#winform 界面刷新

1. 跨线程界面更新

1.1通过委托更新界面

public delegate void RefreshInterface(int num);//创建委托,含有一个参数num
bool MyThreadIsRun = false;//用来控制线程状态
private Thread MyThread = null; //创建线程

private void button1_Click(object sender, EventArgs e)
{
    MyThreadIsRun = !MyThreadIsRun;//切换线程状态
    MyThread = new Thread(Method);//实例化线程对象传递参数
    MyThread.Start();//开启线程
}

/// <summary>
/// 线程所需方法
/// </summary>
public void Method()
{
    RefreshInterface dele = new RefreshInterface(RefreshInterfaceMethod);//给委托对象传递值
    for (int i = 0; i < 1000000; i++)
    {
        if (!MyThreadIsRun)
            break;//当线程状态为false则退出循环
        this.Invoke(dele, i);//执行指定委托,将i的值传递给委托执行方法,更新界面数据
    }
}

/// <summary>
/// 委托所需方法
/// </summary>
/// <param name="num">接收传递的值</param>
public void RefreshInterfaceMethod(int num)
{
    textBox1.Text = num.ToString();//给显示框赋值
}

/// <summary>
/// 关闭窗体事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{

    MyThreadIsRun = false;//关闭线程
    //保证程序退出前,关闭线程(之所以有这个提示框,是为了线程彻底关闭,否则当关闭时,线程可能在执行过程中会出错)
    MessageBox.Show("谢谢使用");
}

1.2 通过Invoke更新

//1.通过点击时间开启线程
private void btn_Click(object sender, EventArgs e)
{
	Thread th = new Thread(A);
	th.Start();
}

//2.在线程中使用Invoke更新界面
public void A()
{
	//循环更新界面20次,每次睡眠200毫秒,
    for (int i = 0; i < 20; i++)
    {
        Invoke(new EventHandler(delegate
        {
            label.Text = "关闭" + i;
        }));
        Thread.Sleep(200);
    }
}

2 跨窗体更新界面

2.1 直接更新

	Application.OpenForms[“窗体名称”].Controls[“控件名称”].Visible = true;

2.2 获取窗体实例对象更新


//1.在A中实例化B的对象,调用B窗体,传递A窗体实例化对象
B B = new B(this);
B.ShowDialog();

//2.在B窗体的构造函数获取A窗体的实例化对象
A _a;
public B(A a)
{
  InitializeComponent();
  _a = a;
}

//3.在B中使用A的实例,更新A界面的数据和属性
public void MyFun()
{
  _a.lbl1.Text = "更新后Text";
}
  • 3
    点赞
  • 14
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

风,停下

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值