如何可变地从类库中调用方法

时间:2019-03-02 11:39:54

标签: c# class-library

我正在尝试找到一种解决方案,该解决方案允许我在窗体项目中编写一个方法,该方法可以从类库项目中可变地调用多个不同的方法。

之所以这样,是因为我想围绕这些方法实现重试逻辑,并防止自己针对每种不同的方法重复执行该逻辑。关于类库方法的唯一一致之处是它们都返回Task<bool>,因此很容易等待并执行逻辑。

到目前为止,我有以下内容:

public async Task Runner(string methodName, params object[] parameters)
        {
            ThreadTimer.Start();
            var tries = 0;
            var ok = false;
            while (tries <= 180)
            {
                try
                {
                    var parameterTypes = (from p in parameters select p.GetType()).ToArray();
                    var mi = typeof(string).GetMethod(methodName, parameterTypes); //Currently returns null
                    var result = (Task<bool>)mi.Invoke(null, parameters);
                    ok = await result;
                    if (ok) break;
                }
                catch (Exception ex)
                {
                    if (ex.InnerException == null)
                    {
                        ExceptionLabel2.Text = ex.Message;
                    }
                    else
                    {
                        ExceptionLabel1.Text = ex.Message;
                        ExceptionLabel2.Text = ex.InnerException.Message;
                    }
                }
                finally
                {
                    tries++;
                }
            }

            if (ok)
            {
                ThreadTimer.Dispose();
            }
            else
            {
                CShellControls.ExitWindowsEx(0, 0); //Logoff
            }
        }

其背后的想法是在字符串中声明一个方法名称,并随其传递一个参数数组。然后,我使用.GetMethod()尝试获取所需的方法信息,但不幸的是,这返回了null

我尝试了几种不同的方法,但是我愿意接受建议和批评。就优化代码而言,我还没有真正考虑它,我只是想先尝试使其工作,然后再采用一种更有效的方法。

提前谢谢!

0 个答案:

没有答案