我有两个项目:项目A和外部项目B(通过“在Visual Studio中添加现有项目”添加)。项目A引用项目B,但项目B没有项目A的引用。我有项目A中的WinForm文本框,我希望项目B能够写入文本。因为项目B没有对项目A的引用,所以我无法调用我在项目A中创建的方法,该方法将文本添加到项目A.文本框。
我的问题:是否可以让Project B调用该方法或写入该文本框而不添加项目引用?
答案 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代码正在运行,则需要额外的工作一个不同的主题。