Изменение свойств объекта из оператора try (C #) - PullRequest
1 голос
/ 18 сентября 2011

Я пытаюсь отобразить элемент управления изображением после запуска проверки порта.

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 ]

1 голос
/ 18 сентября 2011

CheckHTTP равно static, и вы не можете вызывать методы экземпляра из статического метода, если, как вы показали, вы не создадите новый объект в этом методе, в этом случае вы работаете с другим объектом, такскорее всего, вы не получите желаемого поведения.

0 голосов
/ 18 сентября 2011

Вы не можете вызывать displayRed () и displayGreen () из CheckHTTP (), потому что он статический, а другие 2 метода нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...