2017-09-13 49 views
-1

我有兩個項目:項目A和外部項目B(通過在Visual Studio中添加現有項目添加)項目A對項目B有引用,但項目B沒有對Project A的引用我在Project A中有一個WinForm Textbox,我希望Project B能夠寫入文本,因爲Project B沒有對Project A的引用,所以我不能調用方法我在一個項目創建的文本添加到文本框C# - 在沒有雙向引用的情況下在兩個項目之間進行通信

我的問題:?是否有可能有項目B調用該方法或寫入文本框沒有添加項目引用

+0

不知道爲什麼你需要一個循環引用(你不能)...通常項目A是UI和項目B是一個類庫。您應該能夠從項目A調用項目B中的邏輯來呈現數據。其他方法是API,共享數據庫等。您的具體用例是什麼? –

+1

考慮用你想要在其中重用的winform創建一個新的「通用」項目。這樣項目A和B可以參考這個常見的項目。另一種解決方案可能是使用[鏈接](https://docs.microsoft.com/en-us/dotnet/framework/mef/) – 4D1C70

+0

@LukeHutton項目A是UI。項目A調用項目B中的構造函數,啓動一些數據處理 - 我想使用項目A中的UI文本框向用戶顯示處理信息。我正在處理一個安裝程序 - 項目B的處理信息將會是顯示以讓用戶知道當前正在做什麼。 – Roka545

回答

2

循環引用雖然在C#中允許,但往往是糟糕的體系結構決策的症狀。這可能嗎?

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

理想情況下,你會希望B的代碼,只是給你想要的,當你需要它的字符串,所以當它被更新一個可以控制的。

或者,您可以得到涉及的代表。

在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); 
    } 
} 

在答:

如果你的整個應用程序是單線程
void UpdateTextBox(string x) 
{ 
    textBox1.Text = x; 
} 

MyClass myClass = new MyClass(UpdateTextBox); 

像這樣的工作,但WinForms控件有惱人的「只能訪問該對象創建它的線程「的要求,所以如果你的B代碼運行在不同的線程上,那麼額外的工作將是必需的。

相關問題