asp.net中C#委托常用地方

前段时间,做了一个局域网通讯工具的项目,在其中涉及到修改个人资料的模块上,遇到了一个有些意思的问题,就是,当用户在修改资料的窗体修改完个人头像的时候,如何让主窗体也随之更新头像,这里,我想到几种方法,第一,用多线程,第二,C#的Timer定时器,这两种方法,其实都是让程序每隔一定的时间刷新一下用户头像,确定可行,不过,用线程来做,实在有点小题大做,而且也涉及到线程间窗体调用的检查,觉得得不尝失,而定时器——老依靠控件并非明智之举吧。何况我们有更好的办法,对,就是委托。

  在学C#时,我们都知道,委托是一个变量,可以把方法名当做一个值赋给它,这样,我们就可以用这个委托变量来调用这个方法。当初在学的时候,相信大家都有感触:明明调用一下方法就可以完成的事,为什么又要搞个委托,绕个弯呢?

  实际上,在很多情况下,我们并不能直接的调用方法,可能这个方法是private类型的,但又需要在外部来调用它,这时,就可以用委托来调用,下面举一个例子来           

              

 

  这个程序,是在Form2中点击选择图片,打开一个对话框后,选择相应图片,然后在Form1上显示。这里是在Form1中定义一个方法,方法是通过传入的参数来修改本窗体的背景图片,这个方法是private类型的,在Form2中是访问不到的,那么,就可以在Form1中定义一个委托和委托变量,然后把方法名赋值给它,当Form2中选择完图片后,执行调用该委托,就可以执行这个方法,完成Form1窗体背景的修改,

下附代码:

 代码如下 复制代码

public partial class Form1 : Form
    {
 
        /// <summary>
        /// 定义一个显示图片的委托
        /// </summary>
        /// <param name="img"></param>
        public delegate void ShowPicture(Image img);
 
        /// <summary>
        /// 定义委托类型的变量
        /// </summary>
        public static ShowPicture OnPicSaved;
 
        public Form1()
        {
            InitializeComponent();
 
            OnPicSaved = ShowIt;//给变量赋值
        }
 
        /// <summary>
        /// 修改窗体背景颜色的方法
        /// </summary>
        /// <param name="img"></param>
        private void ShowIt(Image img)
        {
            this.BackgroundImage = img;
        }
    }

Form2中的代码如下:

 代码如下 复制代码
    public Form2()
    {
        InitializeComponent();
        Form1 frm1 = new Form1();
        frm1.Show();//显示Form1窗体
    }
 
 
    private void btnSelImg_Click(object sender, EventArgs e)
    {
        if (null == openFileDialog1.ShowDialog())//打开对话框
        {
            return;
        }
 
        //让窗体中的PictureBox显示图片
        picBoxShow.Image = Image.FromFile(openFileDialog1.FileName);
 
        //调用Form1中的委托,更改Form1背景颜色
        Form1.OnPicSaved(picBoxShow.Image);
    }
}

就本人的理解,实现一个功能可以用很多方法,每一种方法代表一种思想,一种理念,对于这个例子,我们可以用线程或者定时器来做,让Form1不断的去判断Form2是否选择了新图片,如果是,我就改。而用委托,则主动权交给了Form2,Form2选择了图片,来告诉我,我再改。没有最好的方法,只有最合适的方法。比如在局域网用Socket通信时,同步阻止模式下,就需要开一个线程来处理与其他用户的会话,这时选择的是线程,而非委托。

时间: 2024-09-20 05:29:52

asp.net中C#委托常用地方的相关文章

收集整理ASP.NET中17种常用正则表达式_正则表达式

"^/d+$" //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-/d+)(0+))$" //非正整数(负整数 + 0) "^-[0-9]*[1-9][0-9]*$" //负整数 "^-?/d+$" //整数 "^/d+(/./d+)?$" //非负浮点数(正浮点数 + 0) "^(([0-9]+/.[0-9]*[1-9][0-9

asp.net中几种常用的身份验证方法总结_实用技巧

前言 在B/S系统开发中,经常需要使用"身份验证".因为web应用程序非常特殊,和传统的C/S程序不同,默认情况下(不采用任何身份验证方式和权限控制手段),当你的程序在互联网/局域网上公开后,任何人都能够访问你的web应用程序的资源,这样很难保障应用程序安全性.通俗点来说:对于大多数的内部系统.业务支撑平台等而言,用户必须登录,否则无法访问和操作任何页面.而对于互联网(网站)而言,又有些差异,因为通常网站的大部分页面和信息都是对外公开的,只有涉及到注册用户个人信息的操作,或者网站的后台

收集整理ASP.NET中17种常用正则表达式

"^/d+$" //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-/d+)(0+))$" //非正整数(负整数 + 0) "^-[0-9]*[1-9][0-9]*$" //负整数 "^-?/d+$" //整数 "^/d+(/./d+)?$" //非负浮点数(正浮点数 + 0) "^(([0-9]+/.[0-9]*[1-9][0-9

asp.net中C#委托的简单介绍

一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的. 关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微,尤其是张子阳的那一篇.我就不用多废话了. 今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景. Func,Action,Predicate全面解析 首先来说明Func委托,通过MSDN我们可以了解到,Func委托有如下的5种类型: (1) *delegate

关于asp.net中内置常用对象的属性方法

问题描述 大家能否告诉我下你你们做项目中经常用的内置对象的属性方法........谢谢各位!! 解决方案 解决方案二:Response,Application,Request,Session看LX怎么说解决方案三:你想干什么?解决方案四:你想让人把本该一本书的内容在这里用不超过10000个字符的篇幅浓缩出来?解决方案五:慢慢整...解决方案六:该回复于2012-04-20 11:55:03被版主删除解决方案七:多看书吧解决方案八:引用2楼的回复: 你想干什么? 我想知道常用是什么........

充分发挥异步在 ASP.NET 中的强大优势

作者:Brij Bhushan Mishra 最近几年,异步编程受到极大关注,主要是出于两个关键原因:首先,它有助于提供更好的用户体验,因为不会阻塞 UI 线程,避免了处理结束前出现 UI 界面挂起.其次,它有助于大幅扩展系统,而且无需添加额外硬件. 但是,编写合适的异步代码来管理线程本身是项乏味的工作.虽然如此,其巨大好处让许多新旧技术纷纷开始使用异步编程.微软自发布了 .NET 4.0以后也对其投入颇多,随后在 .NET 4.5中引入了 async 和 await 关键字,使异步编程变得前所

ASP.NET中常用的文件上传下载方法

asp.net|上传|下载     文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括:1.如何解决文件上传大小的限制2.以文件形式保存到服务器3.转换成二进制字节流保存到数据库以及下载方法4.上传Internet上的资源 第一部分:    首先我们来说一下如何解决ASP.NET中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改WEB.Config文件来自定义最大文件大小,如下:<

asp.net中常用到的SQL分页存储过程

asp.net中常用到的SQL分页存储过程 以下是引用片段:create PROCEDURE [dbo].[myPage] @tblName varchar(255), -- 表名 @fldName varchar(255), -- 排序的字段名,一般为唯一标识 @strGetFields varchar(1000) = ' * ', -- 需要返回的列  @PageSize int = 10, -- 每页有多少条记录 @PageIndex int = 1, -- 第几页 @Count int 

Asp.NET中常用的一些优化性能的方法

asp.net|性能|优化 Asp.NET中常用的一些优化性能的方法 ASP.NET 的缓存机制相比ASP有很大的改进,本文档除对常用优化方法进行总结介绍外,强调了如何使用ASP.NET的缓存来获得最佳性能. 1:不要使用不必要的session和ASP中一样,在不必要的时候不要使用Session. 可以针对整个应用程序或者页面禁用会话状态: l 禁用页面的会话状态 l 禁用应用程序的会话状态 在应用程序的Web.Config文件的sessionstate配置节中,将mode属性设置为off. 即