关于delegate() 的语法

kyo_siye 2006-10-20 03:47:53
代码片断
public class Splasher
{
private static Form m_SplashForm = null;
private static ISplashForm m_SplashInterface = null;
private static Thread m_SplashThread = null;
private static string m_TempStatus = string.Empty;


/// <summary>
/// 显示启动画面
/// </summary>
public static void Show(Type splashFormType)
{
if (m_SplashThread != null)
return;
if (splashFormType == null)
{
throw (new Exception("必须设置启动窗体"));
}

m_SplashThread = new Thread(
new ThreadStart(delegate()
{
CreateInstance(splashFormType);
Application.Run(m_SplashForm);
}
));
m_SplashThread.IsBackground = true;
m_SplashThread.SetApartmentState(ApartmentState.STA);
m_SplashThread.Start();
}


这段代码是什么意思,没有见过delegate的这种用法,多谢大虾们
delegate()
{
CreateInstance(splashFormType);
Application.Run(m_SplashForm);
}
...全文
180 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Muf 2006-10-20
  • 打赏
  • 举报
回复
delegate()
{
CreateInstance(splashFormType);
Application.Run(m_SplashForm);
}


匿名函数。

语法:
返回值 delegate(参数列表){ 函数体 }
其中返回值省略,则为void。

可运用在需要函数或代理的位置。
如:
this.button1.Click += new System.EventHandler(this.button1_Click);

这里需要定义一个函数button1_Click

如果用匿名函数,则可以:
this.button1.Click += delegate(object sender, EventArgs e) { MessageBox.Show("Hello"); };
kyo_siye 2006-10-20
  • 打赏
  • 举报
回复
编译的过,上面的只是代码片断,我把全部代码贴出来吧
using System;
using System.Windows.Forms;
using System.Threading;
using System.Reflection;

namespace SplashScreen
{
public class Splasher
{
private static Form m_SplashForm = null;
private static ISplashForm m_SplashInterface = null;
private static Thread m_SplashThread = null;
private static string m_TempStatus = string.Empty;


/// <summary>
/// 显示启动画面
/// </summary>
public static void Show(Type splashFormType)
{
if (m_SplashThread != null)
return;
if (splashFormType == null)
{
throw (new Exception("必须设置启动窗体"));
}



m_SplashThread = new Thread(
new ThreadStart(delegate()
{
CreateInstance(splashFormType);
Application.Run(m_SplashForm);
}
));
m_SplashThread.IsBackground = true;
m_SplashThread.SetApartmentState(ApartmentState.STA);
m_SplashThread.Start();
}



/// <summary>
/// 设置加载信息
/// </summary>
public static string Status
{
set
{
if (m_SplashInterface == null || m_SplashForm == null)
{
m_TempStatus = value;
return;
}
m_SplashForm.Invoke(
new SplashStatusChangedHandle(delegate(string str) { m_SplashInterface.SetStatusInfo(str); }),
new object[] { value }
);
}

}

/// <summary>
/// 关闭启动画面
/// </summary>
public static void Close()
{
if (m_SplashThread == null || m_SplashForm == null) return;

try
{
m_SplashForm.Invoke(new MethodInvoker(m_SplashForm.Close));
}
catch (Exception)
{
}
m_SplashThread = null;
m_SplashForm = null;
}



private static void CreateInstance(Type FormType)
{

object obj = FormType.InvokeMember(null,
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null);
m_SplashForm = obj as Form;
m_SplashInterface = obj as ISplashForm;
if (m_SplashForm == null)
{
throw (new Exception("启动窗体类型必须是System.Windows.Forms.Form的子类"));
}
if (m_SplashInterface == null)
{
throw (new Exception("启动窗体必须实现ISplashForm接口"));
}

if (!string.IsNullOrEmpty(m_TempStatus))
m_SplashInterface.SetStatusInfo(m_TempStatus);
}


private delegate void SplashStatusChangedHandle(string NewStatusInfo);

}

/// <summary>
/// 启动窗体接口
/// </summary>
public interface ISplashForm
{
void SetStatusInfo(string NewStatusInfo);
}
}
diandian82 2006-10-20
  • 打赏
  • 举报
回复
好像是2。0里面的新东西。我在msndn上见过类似的东西。
www_123du_com 2006-10-20
  • 打赏
  • 举报
回复
能编译通过吗?
我也没见过。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧