首页 > 解决方案 > 如何从类库变量中调用方法

问题描述

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

这样做的原因是我想围绕这些方法实现重试逻辑,并防止自己为每种不同的方法重复它。类库方法唯一一致的是它们都返回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

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

先感谢您!

标签: c#class-library

解决方案


推荐阅读