zhy934453950 2018-01-04 00:19 采纳率: 50%
浏览 1176
已结题

C#winfrom什么情况下定义一个delegate(不是事件)?业界规范是什么?

RT,我是每一项功能(方法函数)或者线程定义一个delegate,还是根据需要的形参不同而分别定义delegate,无关实现功能的分类。比如
按功能定义:
delegate void MultiFileProBarAddValueDelegate(); //定义一个委托
private void Add() {
if (this.InvokeRequired)
{
this.BeginInvoke(new MultiFileProBarAddValueDelegate(Add));

        }
        else
        {
            multiFileProgressBar.Value += 1;
        }
    }
    delegate void MultiFileProBarAdd1ValueDelegate(SQLiteDataReader dr,int temp);

private void MultiFileDataGridViewRowsCreate(SQLiteDataReader dr, int temp)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new MultiFileProBarAdd1ValueDelegate(MultiFileDataGridViewRowsCreate));
}
else
{
while (dr.Read())
{
/*
添加数据项
*/
}
}
delegate void MultiFileDeleteDelegate();
delegate void MultiFileReturnDelegate();
private void MultiFileReturn()
{
if (this.InvokeRequired)
{
this.BeginInvoke(new MultiFileReturnDelegate(MultiFileReturn));

        }
        else
        {
            if (multiFileChoiceButton.Enabled == false)
            {
                multiFileChoiceButton.Enabled = true;
            }
            multiFileReturnButton.Visible = true;
            multiFileWorkingButton.Text = "开始扫描";
        }
    }

/**/
delegate void UniFileDelegate();
delegate void UniFileFillDelegate(SQLiteCommand commandInsert);
delegate void UniFileResultDelegate(SQLiteDataReader dr, List drList);
delegate void UniFileDeleteDelegate(List drList);

只按形参不同定义:
/*同样多文件*/
delegate void MultiFileDelegate();
private void Add() {
if (this.InvokeRequired)
{
this.BeginInvoke(new MultiFileDelegate(Add));

        }
        else
        {
            multiFileProgressBar.Value += 1;
        }
    }

    private void MultiFileChoiceButtonChange()
    {
        if (this.InvokeRequired) 
        {
            this.BeginInvoke(new MultiFileDelegate(MultiFileChoiceButtonChange));
        }
        else
        {
            multiFileChoiceButton.Enabled = false;
        }
    }

    private void MultiFileReturn()
    {
        if (this.InvokeRequired)
        {
            this.BeginInvoke(new MultiFileDelegate(MultiFileReturn));

        }
        else
        {
            if (multiFileChoiceButton.Enabled == false)
            {
                multiFileChoiceButton.Enabled = true;
            }
            multiFileReturnButton.Visible = true;
            multiFileWorkingButton.Text = "开始扫描";
        }
    }

private void MultiFileDataGridViewRowsCreate(SQLiteDataReader dr, int temp)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new MultiFile1Delegate(MultiFileDataGridViewRowsCreate));
}
else
{
while (dr.Read())
{
/*
添加数据项
*/
}

  • 写回答

7条回答 默认 最新

  • bdmh 移动开发领域优质创作者 2018-01-04 00:59
    关注

    这个没有规定,看你的业务需要,如果是无关的业务功能,可以单独写,或者定一个 委托,通过参数区分功能,不同参数去执行不同的业务逻辑

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。