总结网络上的解决方案:新线程=> 委托=> 主界面的异步更新方法(IAsyncResult BeginInvoke(Delegate method)),一句话就是通过委托调用另一个线程的异步方法.

验证方法:当线程执行时,拖拽主窗体,没有卡死迹象.

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms; namespace WinFormInvoke
{
public partial class frMain : Form
{
Invoker Invoker; public frMain()
{
InitializeComponent();
} private void frMain_Load(object sender, EventArgs e)
{
Invoker = new Invoker(AsynUpdateTxtMethod);
} public void UpdateTxtMethod(string msg)
{
tbResult.AppendText(msg + "\r\n");
tbResult.ScrollToCaret();
} public void AsynUpdateTxtMethod(string msg)
{
if (tbResult.InvokeRequired)
{
this.BeginInvoke(new Invoker.CallbackFunc(UpdateTxtMethod), msg);
}
else
{
UpdateTxtMethod(msg);
}
} private void btnStart_Click(object sender, EventArgs e)
{
Invoker.DoThread(int.Parse(tbAmount.Text.Trim()));
}
}
}
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks; namespace WinFormInvoke
{
public class Invoker
{
public delegate void CallbackFunc(string msg);
public CallbackFunc AsynCallback; public Invoker(CallbackFunc callback)
{
AsynCallback = callback;
} public virtual void TheadMethod(int amount)
{
this.AsynCallback("线程开始");
for (int i = ; i < amount; i++)
{
this.AsynCallback(i.ToString());
Thread.Sleep();
} this.AsynCallback("线程结束");
} public virtual void DoThread(int amount)
{
Thread t = new Thread(new ThreadStart(delegate
{
TheadMethod(amount);
})); t.Start();
}
}
}

Invoker

Code:  WinFormInvoke.zip

winform 防止主界面卡死的更多相关文章

  1. Winform开发主界面菜单的动态树形列表展示

    我在之前很多文章里面,介绍过Winform主界面的开发,基本上都是标准的界面,在顶部放置工具栏,中间区域则放置多文档的内容,但是在顶部菜单比较多的时候,就需要把菜单分为几级处理,如可以在顶部菜单放置一 ...

  2. Winform开发框架主界面设计展示

    做了好多年Winform的程序的开发,主窗口的界面设计一般都要求做的更好一些,可以根据不同的系统功能模块进行归类整合,能使客户迅速寻找到相关功能的同时,也能感觉到整体性的美观大方,因此主窗口的界面设计 ...

  3. C# 串口关闭时主界面卡死原因分析

    目录 问题描述 查找原因 SerialPort类Open()方法 SerialPort类Close()方法 死锁原因 解决死锁 总结 问题描述 前几天用SerialPort类写一个串口的测试程序,关闭 ...

  4. Winform 多线程--解决界面卡死问题

    public class ThreadInvoker { /// <summary> /// 回调委托 带参数的 /// </summary> /// <param na ...

  5. winform防止界面卡死的三种方法

    在编程过程中经常会遇到耗时操作,这个时候如果不采取一些必要的异步操作,就会导致界面的卡死,这里以winform为例子,介绍三种方法防止界面卡死,对这几个方法稍加修改同样适用于wpf,silverlig ...

  6. WinForm触摸屏程序功能界面长时间不操作自动关闭回到主界面 z

    操作者经常会在执行了某操作后,没有返还主界面就结束了操作然后离开了,程序应该关闭功能窗体自动回到主界面方便下一位操作者操作.那么对于WinForm程序怎么实现呢? 实现原理:拦截Application ...

  7. C# winform 主界面打开并关闭登录界面

    在winform 界面编程中,我们有时候要在主界面打开之前先显示登录界面,当登录界面用户信息校验正确后才打开主界面,而这时登陆界面也完成使命该功成身退了. 目前有两种方法可实现: 方法1. 隐藏登录界 ...

  8. 多线程、委托、Invoke解决winform界面卡死的问题,并带开关

    一.知识点介绍 1,更新控件的内容,应该调用控件的Invoke方法. Invoke指: 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托.该方法接收一个委托类型和委托的参数,因此需要定义 ...

  9. WinForm多线程+委托防止界面卡死

    1.当有大量数据需要计算.显示在界面或者调用sleep函数时,容易导致界面卡死,可以采用多线程加委托的方法解决 using System; using System.Collections.Gener ...

随机推荐

  1. 高级UNIX环境编程11 线程

    <pthread.h> pthread_equal pthread_self(void) pthread_create() pthread_close() pthread_join() p ...

  2. 羊和汽车问题(或s三门问题(Monty Hall problem)亦称为蒙提霍尔问题)

    三门问题(Monty Hall problem)亦称为蒙提霍尔问题.蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal.问题名字来自该节目的主持人蒙提·霍尔(Mon ...

  3. python的二维数组操作

    需要在程序中使用二维数组,网上找到一种这样的用法: ? 1 2 3 4 5 6 #创建一个宽度为3,高度为4的数组 #[[0,0,0], # [0,0,0], # [0,0,0], # [0,0,0] ...

  4. Uva 167 The Sultan's Successors(dfs)

    题目链接:Uva 167 思路分析:八皇后问题,采用回溯法解决问题. 代码如下: #include <iostream> #include <string.h> using n ...

  5. poj 3624 Charm Bracelet(区间dp)

    题目链接:http://poj.org/problem?id=3624 思路分析: 经典的0-1背包问题: 分析如下: 代码如下: #include <iostream> using na ...

  6. poj 1080 zoj 1027(最长公共子序列变种)

    http://poj.org/problem?id=1080 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=27 /* zoj ...

  7. Android图像篇

    Android的渲染分为2D渲染和3D渲染两种,当中2D渲染的引擎为Skia.3D渲染的引擎是OpenGL ES.眼下.Android支持OpenGL ES1.0和OpenGL ES 2.0两种标准. ...

  8. php - 微信 - 缓存access_token类。

    可扩展性很强. <?php namespace LaneWeChat\Core; /** * 微信Access_Token的获取与过期检查 * Created by Lane. * User: ...

  9. iOS中 视频直播功能-流媒体的使用

    简单介绍: HLS 协议 : >5M会被AppStore拒绝  服务器要求低   延迟高    多平台   RTMP 协议:  电视直播   PC端使用    配合flash插件  及时性好  ...

  10. Android,机器狗应用

    源码如下: package com.wyl.jqr; import java.io.BufferedReader; import java.io.IOException; import java.io ...