C# - 在没有双向引用的情况下在两个项目之间进行通信

时间:2017-09-13 23:09:30

标签: c# winforms visual-studio events delegates

我有两个项目:项目A和外部项目B(通过“在Visual Studio中添加现有项目”添加)。项目A引用项目B,但项目B没有项目A的引用。我有项目A中的WinForm文本框,我希望项目B能够写入文本。因为项目B没有对项目A的引用,所以我无法调用我在项目A中创建的方法,该方法将文本添加到项目A.文本框。

我的问题:是否可以让Project B调用该方法或写入该文本框而不添加项目引用?

1 个答案:

答案 0 :(得分:2)

循环引用虽然在C#中允许,但通常是架构决策不佳的症状。这可能吗?

void MyEventFunction(object sender, EventArgs e)
{
    string txt = MyClassFromB.GetStringFromB();
    textBox1.Text = txt;
}

理想情况下,您希望B的代码只在您需要时为您提供所需的字符串,因此A可以控制何时更新。

或者,您可以让代表参与其中。

在B:

public class MyClass
{
    public delegate void UpdateStringVar(string x);
    private UpdateStringVar usv;
    MyClass(UpdateStringVar v)
    {
        usv = v;
    } 

    void ContinuouslyRunningOperation()
    {
        string status = //get some string
        usv(status);
    }
}

在A:

void UpdateTextBox(string x)
{ 
    textBox1.Text = x;
}

MyClass myClass = new MyClass(UpdateTextBox);

如果您的整个应用程序是单线程的,那么这样的东西将起作用,但是WinForms控件有令人讨厌的“只能从创建它的线程访问此对象”的要求,因此如果您的B代码正在运行,则需要额外的工作一个不同的主题。