c# - 如何从类库变量中调用方法
问题描述
我正在尝试找到一种解决方案,允许我在我的表单项目中编写一个方法,该方法可以从我的类库项目中可变地调用多个不同的方法。
这样做的原因是我想围绕这些方法实现重试逻辑,并防止自己为每种不同的方法重复它。类库方法唯一一致的是它们都返回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
。
我尝试了几种不同的方法,但我愿意接受建议和批评。就优化代码而言,我并没有真正考虑太多,我只是想先尝试让它工作,然后再采用更有效的方法。
先感谢您!
解决方案
推荐阅读
- python - 使用 python 清理文件中的 \u2764\ufe0f \u2026 数据
- java - 如何修复注入模型(javax.mvc.Models)的不满意依赖关系?
- python - 自动解析网站对话框中的文本
- r - 如何将第 30 行到最后一行数据与最后一行数据进行比较
- python - Pandas 组内列总和的总和和除法(按 agg)
- python - 如何在 Django 模型中获取文件的不同子字符串?
- python - 根据来自另一个 DataFrame 的标准过滤 Pandas 中的 DataFrame
- javascript - d3.js 气泡图中的中心图像
- javascript - 使用带有 nextjs 的 react-dropzone - 输入类型为“file”的多个属性卡在 false 以进行服务器渲染,如何将其设置为 true?
- python - pd.DataFrame 中的 Nan(对称矩阵)