在try语句中更改对象属性(c#)
本文关键字:属性 对象 try 语句 | 更新日期: 2023-09-27 18:09:01
我正在尝试在端口检查运行后显示图像控件。
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()方法,尽管当该方法运行时它不会像预期的那样隐藏图像控件。我假设这是因为我已经创建了该类的另一个实例。(如果我正常运行该方法-不使用对象,图像控件被正确隐藏。)
所以我想我的问题是如何解决这个问题?
如果我没有很好地解释情况,请让我知道,我会尽我最大的努力详细说明。由于CheckHTTP
是static
,你不能从静态方法调用实例方法,除非,就像你已经展示的,你在该方法中创建了一个新对象,在这种情况下,你正在使用一个不同的对象,所以你可能不会得到你想要的行为。
你不能从CheckHTTP()中调用displayRed()和displayGreen(),因为它是静态的,而其他两个方法不是。