从try语句中更改对象属性(C#)

时间:2011-09-18 18:11:36

标签: c# .net windows

我正在尝试在运行端口检查后显示图像控件。

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

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

如果我没有很好地解释情况,请告诉我,我会尽力详细说明。感谢

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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