我正在尝试在运行端口检查后显示图像控件。
namespace MonitorFlux
{
public partial class Form1 : Form
{
PortChecks PortCheckObject = new PortChecks();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public static void CheckHTTP()
{
string hostname = "google.com";
int portno = 80;
IPAddress ipa = (IPAddress)Dns.GetHostAddresses(hostname)[0];
Form1 formobject = new Form1(); // Create new class object, so can call other methods in the class
try
{
System.Net.Sockets.Socket sock = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
sock.Connect(ipa, portno);
if (sock.Connected == true) // Port is in use and connection is successful
{
MessageBox.Show("Port is Open");
formobject.displayGreen();
}
sock.Close();
}
catch (System.Net.Sockets.SocketException ex)
{
if (ex.ErrorCode == 10061) // Port is unused and could not establish connection
{
formobject.displayRed();
MessageBox.Show("Port is Closed");
}
else
{
MessageBox.Show(ex.Message);
}
}
}
public void displayGreen()
{
pictureBox2.Visible = false;
pictureBox1.Visible = true;
}
private void displayRed()
{
pictureBox2.Visible = true;
pictureBox1.Visible = false;
}
private void testCheck_Click(object sender, EventArgs e)
{
CheckHTTP();
// MessageBox.Show(PortCheckObject.httpport);
}
}
}
它不会让我从try子句中调用方法,例如displayRed()
因此,我创建了一个Form1类的对象来运行displayRed()方法,但是当该方法运行时,它不会按预期隐藏图像控件。我假设这是因为我已经创建了该类的另一个实例。 (如果我正常运行该方法 - 不使用对象,则图像控件被正确隐藏。)
所以我想我的问题是如何解决这个问题?
如果我没有很好地解释情况,请告诉我,我会尽力详细说明。感谢
答案 0 :(得分:1)
CheckHTTP
是static
,你不能从静态方法中调用实例方法,除非像你所示,你在该方法中创建一个新对象,在这种情况下你正在使用一个不同的对象,所以你可能无法得到你想要的行为。
答案 1 :(得分:0)
你不能从CheckHTTP()调用displayRed()和displayGreen(),因为它是静态的,而其他两种方法则不是。