表单和用户控件之间的引用无限循环c#

时间:2017-05-12 08:27:09

标签: c# forms reference user-controls

我有一个表单和一个用户控件。两者都必须互相引用,因为我需要在我的表单中引用我的用户控件中的控件,我需要在我的用户控件中引用我的表单中的控件。表单和用户控件必须相互链接。我知道我用下面的代码创建了一个无限循环。我需要做些什么才能确保表单和用户控件在不创建无限循环的情况下相互引用?

我的表格中的代码

#!/usr/bin/env python

from random import randint
import socket, select
from time import gmtime, strftime
import threading
import sys

class Handler(threading.Thread):
    def __init__(self, connection, randomnumber):
        threading.Thread.__init__(self)
        self.connection = connection
        self.randomnumber = randomnumber

    def run(self):
        while True:
            try:
                data = self.connection.recv(1024)

                if data:

                    print(data)

                    try:
                        num = int(data)

                        if Server.guess(num) :
                            msg = "You won! This is the right number!"
                            self.connection.send(msg.encode())
                            break
                        else :
                            msg = "Try again!"
                            self.connection.send(msg.encode())


                    except ValueError as e:
                        msg = "%s" % e
                        self.connection.send(msg.encode())
                else:
                    msg = "error"
                    self.connection.send(msg.encode())

            except socket.error:
                self.connection.close()
                break
        self.connection.close()


class Server:
    randnum = randint(1,100)
    def __init__(self, ip, port):
        self.ip = ip
        self.port = port
        self.address = (self.ip, self.port)
        self.server_socket = None


    @classmethod
    def guess(cls, no):
        if cls.randnum == no:
            cls.randnum = randint(1, 1000)
            print("New number is ", cls.randnum )
            result = True
        else:
            result = False
        return result

    def run(self):
        try:
            self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.server_socket.bind((self.ip, self.port))
            self.server_socket.listen(10)

            print('Num is %s' % self.randnum)

            while True:
                connection, (ip, port) = self.server_socket.accept()

                c = Handler(connection, self.randnum)
                c.start()

        except socket.error as  e:
            if self.server_socket:
                self.server_socket.close()
            sys.exit(1)


if __name__ == '__main__':
    s = Server('127.0.0.1', 1234)
    s.run()

我的用户控件中的代码

public partial class frmDamageRiskCalculation : MetroFramework.Forms.MetroForm
{
    private FreshSaltWater FSW = new FreshSaltWater();

1 个答案:

答案 0 :(得分:0)

如果您完全确定您的代码中必须使用此交叉引用(请仔细考虑,我们通常可以避免它),您想要的是管理关系的中间对象,如本答案中所述: How to cross-reference objects in classes