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
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?