【发布时间】:2018-11-05 08:54:56
【问题描述】:
我的英语不是很好很抱歉,但我尽量完美地告诉我的问题
这是我用来加载数据网格的内容
private Task Loading(Func<string> SearchStringForUser)
{
return Task.Run(() =>
{
var query = database.Database.SqlQuery<VW_Users>("select * From VW_Users where 1 = 1 And GymID = " + PublicVar.ID + " " + SearchStringForUser());
var user = query.ToList();
Dispatcher.InvokeAsync(() =>
{
DataGrid_User.ItemsSource = user;
});
});
}
首先我有一个 InvokeAsync 但它不能完美运行我的意思是当加载的数据要列出时我的程序挂起。 无论如何,这不是我的主要问题,但如果有人知道那是什么原因可以指出它 但我的主要问题是当我有 +200 行时。程序不会在 30 秒或更长时间内加载所有日期。看起来我的程序数据网格为 30 秒或更长时间为空。
我想按 10 行 10 行加载数据,我的意思是我想在加载 10 行时填充我的数据网格,在接下来的 10 行之后, 像 10 20 30 40 …… 有了这个我的数据网格永远不会清空 并且数据将缓慢加载 有人能告诉我最好的方法吗?
【问题讨论】:
-
您不需要使用调度程序。只需将 ItemsSource 分配移出任务。等待查询任务后执行。将 Loading 方法声明为 async。
-
无论如何它都不会工作,因为我得到错误:调用线程无法访问此对象,因为不同的线程拥有它异步但如果我将 ItemsSource 移出任务,它将异步工作?有可能吗?
-
还有一个问题,如果它不像 Async 那样工作,为什么它叫 InvokeAsync?还有不同的 beetwen Anvoke 和 InvokeAsync?