2015-05-20 33 views
0

我已經構建了一個軟件,它從數字秤中檢索重量並將其輸出到WinForms中的標籤中。每次秤的重量發生變化時,它也會在標籤中自動更新。我成功地做到了。從數字秤DLL文件同步更新重量C#

這是我的代碼:

public partial class Form1 : Form 
    { 
     private SerialPort port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One); 

     public Form1() 
     { 
      InitializeComponent(); 

      port.DtrEnable = true; 
      port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      port.Open(); 
     } 

     private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) 
     { 
      try 
      { 
       this.Invoke(new EventHandler(DoUpdate)); 
      } 
      catch (Exception ex) 
      { 

      } 
     } 

     private void DoUpdate(object s, EventArgs e) 
     { 
      try 
      { 
       label1.Text = port.ReadLine(); 
      } 
      catch (Exception ex) 
      { 
       label1.Text = ex.ToString(); 
      } 
     } 
    } 

現在,我的老闆讓我實現一個.dll文件(類庫)這個代碼。他只是想添加一個參考,稱之爲類,它會返回重量,並且會自動更新。 他只是想使頁面加載一個簡單的呼叫這樣的例子:

Scale sc = new Scale(); 
label1.text = sc.weight(); 

我可以成功返回的重量,但它並沒有通過類庫自動更新,這是我用我的類代碼庫(.DLL文件):

public class Scale 
    { 
     SerialPort port; 

     public string weight() 
     { 
      try 
      { 
       port = new SerialPort(com, 9600, Parity.None, 8, StopBits.One); 

       if (port.IsOpen == false) 
       { 
        port.Open(); 
       } 

       port.DtrEnable = true; 

       return port.ReadLine();; 
      } 
      catch(Exception ex) 
      { 
       return ""; 
      } 
     } 
    } 

我希望我的解釋清楚。任何幫助代碼? 在此先感謝。

+0

您需要查看數據綁定:https://msdn.microsoft.com/en-us/library/ef2xyb33(v=vs.90).aspx – phoog

回答

0

看來你已經在你的WinForms應用程序的port.DataReceiver上綁定了一個事件,但是你的類庫不支持這個。類庫僅向調用代碼返回一次字符串。

我想有些方法可以在類庫中引發事件,但我想調用代碼需要監聽事件。

+0

那麼這是可能的嗎?如果是,那麼您是否對代碼有所瞭解,因爲我沒有弄清楚如何在3天內做到這一點。 :/ – coldfire

+0

我認爲這可能與觀察者模式有關。但是你不能以這種方式調用它Scale sc = new Scale(); label1.text = sc.weight();.你需要做一些像Scale sc = new Scale(); ScaleObservable observable = new ScaleObservable(sc); ScaleObserver sc =新的ScaleObserver(可觀察);當調用類庫時。然後您將能夠更好地處理來自SerialPort的事件。這是一個很好的示例,您可以在控制檯應用程序中運行:http://www.masnun.com/2012/04/13/implementing-the-observer-pattern-in-c-code-samples.html – an1s

+0

謝謝,我如果我能做到的話,我會試試。謝謝你的解釋。 :) – coldfire