在不同的线程WPF UI上运行的方法

时间:2016-03-13 12:15:58

标签: c# wpf multithreading thread-safety

我需要在我的应用程序上保证线程安全,你如何建议设计代码? 我希望method1每5秒运行一次并连接到数据库,OnclickButton(object sender ,event e)上的数据将连接数据库。

它是这样的:

method1()
{
    // connect db
    // do something
} 
OnclickButton(object sender,event e)
{
    // connect db
    // do something 2
}

谢谢你们

1 个答案:

答案 0 :(得分:1)

嗯,它有点广泛,但在我看来,你需要两个选择:

  1. 使用MVVM pattern这是WPF应用程序的标准事实。您可以使用许多MVVM库,如MVVM light toolkit。它将帮助您分离表示逻辑和业务逻辑。
  2. 很好,在第一步之后,您将拥有ViewModel带有绑定数据,可以从Model更新或启动操作。您的ViewModel可以以异步方式从Model获取数据,并在UI线程中更新自己的属性。如果您使用的是Asynchronous Programming with Async and Await,那么如果您的方法从UI线程启动,您可以继续使用您的代码。如果您正在使用"旧式"然后,您可以使用Dispatcher类来更新UI线程中的可绑定属性:

    var newUsername = model.GetUserName(); // background thread
    Application.Current.Dispatcher.BeginInvoke(
        new Action(() => this.UserName = newUsername));