相关疑难解决方法(0)

UI线程上的任务继续

是否有一种"标准"方式来指定任务延续应该在创建初始任务的线程上运行?

目前我有下面的代码 - 它正在工作,但跟踪调度程序和创建第二个动作似乎是不必要的开销.

dispatcher = Dispatcher.CurrentDispatcher;
Task task = Task.Factory.StartNew(() =>
{
    DoLongRunningWork();
});

Task UITask= task.ContinueWith(() =>
{
    dispatcher.Invoke(new Action(() =>
    {
        this.TextBlock1.Text = "Complete"; 
    }
});
Run Code Online (Sandbox Code Playgroud)

.net c# wpf multithreading task

205
推荐指数
5
解决办法
9万
查看次数

在比较结果上的原子交换价值

我有一个非常简单的操作需要原子地完成:

if (a > b)
  b = a
Run Code Online (Sandbox Code Playgroud)

其中a和b是整数

编辑:和一个是本地的.

有没有一种快速的方法在C#中做到这一点?如果可能的话,我想避免手动锁定.我看过Interlocked.CompareExchange,但据我了解,这只是测试是否相等.

谢谢!

.net c# multithreading synchronization atomic

6
推荐指数
1
解决办法
1253
查看次数

寻找太多房产变化的替代方案

我正在开发一个WPF应用程序,我必须根据其他视图模型(ChildModel)的集合对viewmodel(GroupedViewModel)进行分组.

视图模型和属性更改的集合:

ObservableCollection<ChildModel> chlidModelCollection;
//initialize child model 
childModel.PropertyChanged += OnChildModelPropertyChanged

public void OnChildModelPropertyChanged(object sender, 
PropertyChangedEventArgs args)
{
    //try grouping GroupViewModel
    //do some tasks which takes little over time
}
Run Code Online (Sandbox Code Playgroud)

由于Child Viewmodel有10个属性,因此对属性的任何更改都会调用OnChildModelPropertyChanged10次​​.对于集合中10个子模型的集合,OnChildModelPropertyChanged称为10*10 = 100次.这会影响性能.

对于子视图模型集合中的所有属性更改,是否有一种方法可以获取聚合或最终变更集.我错过了什么吗?

c# wpf mvvm

3
推荐指数
1
解决办法
210
查看次数

标签 统计

c# ×3

.net ×2

multithreading ×2

wpf ×2

atomic ×1

mvvm ×1

synchronization ×1

task ×1