【发布时间】:2020-05-13 14:17:36
【问题描述】:
在这里需要您的帮助。 我想做什么? 我基本上是对定义的 IP 范围发出 SNMP 请求,如果它们可访问/可 Ping,则将它们显示在 DataTable 上。我能够发出作为单独任务运行的 SNMP 请求,但我无法用结果更新我的 DataTable。作为 gridControl 在自己的线程上运行。
请帮助。我在下面粘贴我的代码。
public partial class Discovery : DevExpress.XtraEditors.XtraForm
{
DataTable dt = null;
public Discovery()
{
InitializeComponent();
simpleButton2.Enabled = false;
dt = new DataTable();
gridControl1.DataSource = CreateColumns(dt);
}
private DataTable CreateColumns(DataTable dt)
{
dt.Columns.Add("#", typeof(int));
dt.Columns.Add("IP Address", typeof(string));
dt.Columns.Add("Username", typeof(string));
dt.Columns.Add("Password", typeof(string));
dt.Columns.Add("Firmware Version", typeof(string));
return dt;
}
private async void simpleButton1_Click(object sender, EventArgs e)
{
await SnmpRequest();
//dt = CreateData(0);
//this.ShowGrid(dt);
simpleButton2.Enabled = true;
}
private async Task SnmpRequest()
{
await Task.Run(() =>
{
for (int i = 130; i < 140; i++)
{
string ipAddress = "192.168.10." + i;
try
{
var result = Messenger.Get(VersionCode.V1,
new IPEndPoint(IPAddress.Parse(ipAddress), 161),
new OctetString("public"),
new List<Variable> { new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.1.0")) },
2000);
foreach (var el in result)
{
string[] obj = new string[2];
obj[0] = ipAddress;
obj[1] = el.Data.ToString();
MethodToAdd(obj);
}
}
catch (Exception ex)
{
string[] obj = new string[2];
obj[0] = ipAddress;
obj[1] = ex.Message;
MethodToAdd(obj);
}
}
});
}
delegate void test(object[] strArr);
private void MethodToAdd(string[] str)
{
object[] objArr = new object[2];
objArr[0] = str[0];
objArr[1] = str[1];
gridView1.BeginInvoke(new test(PutLog), new object[] { str });
}
private void PutLog(object[] obj)
{
gridView1.AddNewRow();
gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns[0], "1");
gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns[1], obj[0]);
gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns[2], "3");
gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns[3], "4");
gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns[4], obj[1]);
gridView1.UpdateCurrentRow();
}
private void PutLog(string[] str)
{
gridView1.AddNewRow();
gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns[0], "1");
gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns[1], str[0]);
gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns[2], "3");
gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns[3], "4");
gridView1.SetRowCellValue(gridView1.FocusedRowHandle, gridView1.Columns[4], str[1]);
gridView1.UpdateCurrentRow();
}
}
输出:- 如下所示的错误 参数 2:无法将测试转换为 System.Action
【问题讨论】:
标签: c# gridview datatable devexpress gridcontrol