2013-08-24 141 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好得多。在执行操作系统代码的过程中挂起一个线程是一个可怕的想法,可能会导致整个系统死锁。在预定的等待点停下来会好很多。 –