2013-08-24 177 views
-1

所以我們假設我有兩個類,一個是winform,另一個是資源中的class.cs。所以當表格被加載時,我運行代碼(resources.scripts.db_connect.getinfo();),它轉到db_connect類並運行方法getinfo。然後,在數據庫有機會讀取之前,winform將繼續運行代碼。這意味着txtboxes不會被更新。如何在另一段代碼完成之前暫停代碼?

我能想到的兩種解決方案,

  • 修改數據庫連接方法中的文本框中。 (這 帶來了一個問題跨類附加控制)ORR ..

  • 暫停在WinForm的代碼,直到該數據庫連接是 封閉和有一個觸發器觸發在WinForm繼續就 編碼。

如果還有其他解決方案,請告訴我!如果不是,我怎麼去要麼,我所有的努力,到目前爲止都是徒勞:(

(只是爲了澄清,我的「想」是爲應用程序start > windows form to load > connect to database and read > write those to text boxes/labels

private void client_Load(object sender, EventArgs e) 
    { 
     Resources.Scripts.db_connections.getchar1(); 
     // stop here until event is re-fired... 
     textboxexample.Text = Resources.String.info.examplestring; 
    } 


class db_connections 
{ 
    public static void getchar1() 
    { 
     try 
     { 
      // My database connection is run in here... 

     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 

     finally 
     { 
      // re fire event on previous class 
     } 
    } 
} 
+1

'所以當加載形式我運行code'在哪裏你運行代碼?哪個事件? – I4V

+1

閱讀'BackgroundWorker's和/或'異步'/'等待' –

+0

你的db_connect類是靜態的嗎?另外你目前如何填充你的文本框。 –

回答

-3

你可以使用線程概念...使用線程指南和用於每個進程創建單獨的線程,然後按照下面的步驟

1)運行第一處理

2)的螺紋暫停使用掛起該線程()功能

3)運行第二個進程的線程

4),那麼,當你想和暫停的進程繼續只使用個人簡歷()函數

+2

線程同步有很多好的機制(WaitHandles,async/await,後臺工作者)使用這些線程原語操作是不必要的,並且是非常危險的。 –

+0

同意WaitHandle比Thread.Suspend好得多。在執行操作系統代碼的過程中掛起一個線程是一個可怕的想法,可能會導致整個系統死鎖。在預定的等待點停下來會好很多。 –