更新得更清楚了......
我有一个主要形式 ,Form1
和一个附加类,AslLib
。Form1
包含一个更新dataGridView
它包含的控件的方法。中的一个方法AslLib
调用此方法。
我的问题是,我可以AslLib
调用 call方法的唯一Form1
方法是创建一个Form1
inAslLib
调用方法的实例,如下所示:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void updateDataGUI(int row, string url, string status, long time)
{
Console.WriteLine(status);
foreach (DataGridViewRow dgvr in dataGridView1.Rows) dgvr.Cells[0].Value = status;
}
}
static class AslLib
{
public static async void makeRequest(string url, int row )
{
string result;
Stopwatch sw = new Stopwatch(); sw.Start();
try
{
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = new HttpResponseMessage();
response = await client.GetAsync(url);
if (response.IsSuccessStatusCode)
{
result = ((int)response.StatusCode).ToString();
}
else
{
result = ((int)response.StatusCode).ToString();
}
}
}
catch (HttpRequestException hre)
{
result = "Server unreachable";
}
sw.Stop();
long time = sw.ElapsedTicks / (Stopwatch.Frequency / (1000L * 1000L));
_form.updateDataGUI(row, url, result, time);
}
}
我已经尝试在构造函数和方法中传递参数,但是因为(我认为)makeRequest
方法是静态的,编译器给出了错误:
AsyncURLChecker.AslLib._form: cannot declare instance members in a static class AsyncURLChecker
Static classes cannot have instance constructors AsyncURLChecker
上面的结果是' 方法的Console.WriteLine(status);
部分正确输出,但是没有改变。Form1
status
dataGridView
我的信念是,因为我正在创建 的新实例Form1
,所以我不再引用Form1
包含我的原始实例dataGridView
,而是一个全新的副本,因此它不会改变。
谁能告诉我如何dataGridView
从另一个班级操纵原始的 Form1?如果可能,我首选的方法是调用一个Form1
更新dataGridView
而不是直接访问dataGridGiew
的方法AslLib
。