在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()方法,尽管当该方法运行时它不会像预期的那样隐藏图像控件。我假设这是因为我已经创建了该类的另一个实例。(如果我正常运行该方法-不使用对象,图像控件被正确隐藏。)

所以我想我的问题是如何解决这个问题?

如果我没有很好地解释情况,请让我知道,我会尽我最大的努力详细说明。由于

在try语句中更改对象属性(c#)

CheckHTTPstatic,你不能从静态方法调用实例方法,除非,就像你已经展示的,你在该方法中创建了一个新对象,在这种情况下,你正在使用一个不同的对象,所以你可能不会得到你想要的行为。

你不能从CheckHTTP()中调用displayRed()和displayGreen(),因为它是静态的,而其他两个方法不是。

相关文章: