XPBaseCollection.LoadAsync(AsyncLoadObjectsCallback) Method
Asynchronously loads persistent objects of a specific type from the data store into the collection, and notifies upon completion.
Namespace: DevExpress.Xpo
Assembly: DevExpress.Xpo.v24.2.dll
NuGet Package: DevExpress.Xpo
#Declaration
#Parameters
Name | Type | Description |
---|---|---|
callback | DevExpress. |
A DevExpress. Use callback to do the following:
Do not raise exceptions or modify persistent objects within a callback. |
#Returns
Type | Description |
---|---|
Boolean | true if the current method call started the collection load; otherwise, false. |
#Remarks
To reload data from a data store to the collection, call the XPBaseCollection.Reload method.
We recommend using the LoadAsync(CancellationToken) Task-based overload instead of this method.
Note
If the XPBase
#Example
The following example demonstrates how to asynchronously work with persistent objects.
In this example, a collection (xpcPersons) of Person objects is used as a data source for a grid control (gridPersons). The Update and Commit buttons (btnUpdate and btnCommit) allow users to update the grid control and store changes to a data store while continuing to interact with other UI elements. The accessibility of the grid control and these buttons is automatically updated within operation callbacks (CallBackLoadPersons and CallBackCommitChanges).
using DevExpress.Xpo;
using DevExpress.Xpo.DB;
namespace AsyncOperations {
// A custom XPObject
class Person : XPObject {
//...
}
public class AsyncLoading {
UnitOfWork unitOfWork;
// Initialize unitOfWork here.
//...
// An XPCollection to be used as a data source for the gridPersons grid control
XPCollection xpcPersons;
//...
// The Click event handler of the Update button
private void btnUpdate_Click(object sender, EventArgs e) {
if (xpcPersons == null) {
xpcPersons = new XPCollection(unitOfWork, typeof(Person));
LoadAsyncPersons();
gridPersons.DataSource = xpcPersons;
} else {
LoadAsyncPersons();
}
}
// Disables buttons and the grid control and initiates asynchronous collection loading
void LoadAsyncPersons() {
btnUpdate.Enabled = false;
btnCommit.Enabled = false;
gridPersons.Enabled = false;
xpcPersons.LoadAsync(new DevExpress.Xpo.Helpers.AsyncLoadObjectsCallback(
CallBackLoadPersons));
}
// Called after collection loading is complete
// Re-enables buttons and the grid control
void CallBackLoadPersons(ICollection[] result, Exception ex) {
btnUpdate.Enabled = true;
btnCommit.Enabled = true;
gridPersons.Enabled = true;
if (ex != null) {
MessageBox.Show(ex.Message);
}
}
// The Click event handler of the Commit button
// Disables buttons and the grid control and asynchronously commits changes
private void btnCommit_Click(object sender, EventArgs e) {
btnUpdate.Enabled = false;
btnCommit.Enabled = false;
gridPersons.Enabled = false;
unitOfWork.CommitChangesAsync(new AsyncCommitCallback(CallBackCommitChanges));
}
// Called after changes have been saved
// Re-enables buttons and the grid control
void CallBackCommitChanges(Exception ex) {
btnUpdate.Enabled = true;
btnCommit.Enabled = true;
gridPersons.Enabled = true;
if (ex != null) {
MessageBox.Show(ex.Message);
}
}
}
}