zoukankan      html  css  js  c++  java
  • XAF 如何用其他线程更新对象

    // Developer Express Code Central Example:
    // How to update a View object from another thread.
    // 
    // It is well known that most Windows Forms are not thread safe, and all changes to
    // these controls should run (be marshaled on to) the thread processing windows
    // events (the main UI thread). Worker threads are often used to do lengthy
    // calculations or process asynchronously messaged events, allowing the UI to react
    // to the user while these tasks are operating. This example shows how bypass this
    // limitation by updating the object directly in the database, and then refreshing
    // the view to reload the current object. This is a little bit tricky, but works
    // quite well. Another known workaround, is marshaling actual work to the main UI
    // thread, for instance in the main form. You can learn more about this in MSDN,
    // Google, etc. For instance, here is a good article:
    // http://weblogs.asp.net/justin_rogers/pages/126345.aspx
    // 
    // You can find sample updates and versions for different programming languages here:
    // http://www.devexpress.com/example=E1394

    using System.ComponentModel;
    using DevExpress.ExpressApp;
    using DevExpress.ExpressApp.Actions;
    using System.Threading;
    using DevExpress.Xpo;

    namespace WinSolution.Module.Win {
        
    public partial class ChangeCurrentObjectFromAnotherThreadViewController : ViewController {
            
    public ChangeCurrentObjectFromAnotherThreadViewController() {
                InitializeComponent();
                RegisterActions(components);
            }
            
    private void simpleAction1_Execute(object sender, SimpleActionExecuteEventArgs e) {
                BackgroundWorker worker 
    = new BackgroundWorker();
                worker.DoWork 
    += new DoWorkEventHandler(worker_DoWork);
                worker.RunWorkerCompleted 
    += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
                worker.RunWorkerAsync();
            }
            
    void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
                View.ObjectSpace.Refresh();
            }
            
    void worker_DoWork(object sender, DoWorkEventArgs e) {
                Thread.Sleep(
    1000);
                DomainObject1 obj 
    = (DomainObject1)View.CurrentObject;
                
    if (obj != null) {
                    
    using (UnitOfWork uow = new UnitOfWork(View.ObjectSpace.Session.DataLayer)) {
                        DomainObject1 copy 
    = uow.GetObjectByKey<DomainObject1>(obj.Oid, true);
                        copy.Name 
    = "test";
                        uow.CommitChanges();
                    }
                }
            }
        }
    }

    欢迎转载,转载请注明出处:http://www.cnblogs.com/Tonyyang/

  • 相关阅读:
    java基础-BigDecimal类常用方法介绍
    java基础-BigInteger类常用方法介绍
    java基础-Arrays类常用方法介绍
    java基础-Math类常用方法介绍
    java基础-System类常用方法介绍
    java基础-Integer类常用方法介绍
    java基础-数组的折半查找原理
    Java基础-数组常见排序方式
    Java基础-日期格式化DateFormat类简介
    Java基础-Calendar类常用方法介绍
  • 原文地址:https://www.cnblogs.com/Tonyyang/p/1790950.html
Copyright © 2011-2022 走看看