C# 是否将参数传递给匿名方法?

C# 是否将参数传递给匿名方法?,c#,.net,anonymous-methods,C#,.net,Anonymous Methods,我有以下方法: while (TryCount < 2) { Lock.Try<object>(inCommandObj.Connection, _timeout, delegate(DataSet ds) { dataAdapter = new OdbcDataAdapter(inCommandObj); returningObj = dataAdapter.Fill(ds); done = true;

我有以下方法:

while (TryCount < 2)
{
    Lock.Try<object>(inCommandObj.Connection, _timeout, delegate(DataSet ds)
    {
        dataAdapter = new OdbcDataAdapter(inCommandObj);
        returningObj = dataAdapter.Fill(ds);
        done = true;
        return returningObj;
    });

    if (done)
        break;

    inCommandObj.Cancel();
}
while(TryCount<2)
{
Try(inCommandObj.Connection,_超时,委托(数据集ds)
{
dataAdapter=新的OdbcDataAdapter(inCommandObj);
returningObj=dataAdapter.Fill(ds);
完成=正确;
返回返回bj;
});
如果(完成)
打破
inCommandObj.Cancel();
}
您可以看到,我试图将数据集传递给这个匿名方法,但它不喜欢它?我怎样才能做到这一点

问候

编辑1:异常消息现在是:委托“System.Func”不接受1个参数

编辑2:在这种情况下,我需要用dataAdapter.fill方法填充现有的数据集。这必须使用锁(带timout)来完成,因为将有很多线程运行此方法。如果锁超时,我需要取消当前的MySQL命令,然后尝试发送一个新命令(1次)

编辑3:这是lock类的外观:

public static class Lock
    {
        public static T Try<T>(object objLock, int timeout, Func<T> f)
        {
            if (System.Threading.Monitor.TryEnter(objLock, timeout))
            {
                try
                {
                    return f.Invoke();
                }
                finally
                {
                    System.Threading.Monitor.Exit(objLock);
                }
            }
            return default(T);
        }

        public static void Try(object objLock, int timeout, Action f)
        {
            if (System.Threading.Monitor.TryEnter(objLock, timeout))
            {
                try
                {
                    f.Invoke();
                }
                finally
                {
                    System.Threading.Monitor.Exit(objLock);
                }
            }
        }
    }
公共静态类锁
{
公共静态T Try(对象对象对象锁定,int超时,函数f)
{
if(系统线程监视器TryEnter(对象锁定,超时))
{
尝试
{
返回f.Invoke();
}
最后
{
系统。线程。监视器。退出(objLock);
}
}
返回默认值(T);
}
公共静态void Try(对象对象对象锁定、int超时、操作f)
{
if(系统线程监视器TryEnter(对象锁定,超时))
{
尝试
{
f、 调用();
}
最后
{
系统。线程。监视器。退出(objLock);
}
}
}
}
在这行中:

public static T Try<T>(object objLock, int timeout, Func<T> f)

如果这不符合你的意图,那么你需要重构<代码>尝试来使用不同的<代码> FUNC参数,或者考虑一个完全不同的解决方案。

“它不喜欢它”是对这个问题的一个很差的描述。会发生什么?错误消息是什么?您想做什么?你的密码伤了我的眼睛。也许,如果你写下你想做的事情,有人会给你一个更好的解决方案。如果你只是立即重新分配它,为什么你要传递
ds
?什么是
TryCount
,为什么这不是一个无限循环?你仍然没有写下你想做的事情,无论您使用锁和监视器尝试什么,都是非常危险的。如果我将DataSet作为inparameter,这会是什么样子?@Ivy-将声明更改为
public static T Try(object objLock,int timeout,Func f)
Lock.Try<object>(inCommandObj.Connection, _timeout, () =>
{
    var ds = new DataSet();
    dataAdapter = new OdbcDataAdapter(inCommandObj);
    returningObj = dataAdapter.Fill(ds);
    done = true;
    return returningObj;
});