より明確になるように更新されました。
メインフォーム、、Form1
および追加のクラス、がありAslLib
ます。含まれているコントロールForm1
を更新するメソッドが含まれています。dataGridView
のメソッドAslLib
はこのメソッドを呼び出します。
AslLib
私の問題は、のメソッドを呼び出すことができる唯一の方法は、次のようにの呼び出しメソッドのForm1
インスタンスを作成することです。Form1
AslLib
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