关于多线程,数据绑定及类存储的问题

米落 2014-12-08 09:48:51
加精
MainPage.xaml.cs
 
Task A;
public MainPage()
{
InitializeComponent();
Class1 cl = new Class1
{
Second = 600
};
collecion.Add(cl);
A = new Task(() => Task_A());
A.Start();
}
private void Task_A()
{
Class1 cl = new Class1
{
Second = 600
};
collecion.Add(cl);
}

Class1.cs

public class Class1: INotifyPropertyChanged
{

int second;

public event PropertyChangedEventHandler PropertyChanged;

public Class1()
{
}
public int Second
{
set
{
if (value != second)
{
second = value;
OnPropertyChanged(new PropertyChangedEventArgs("Second"));
}
}
get
{
return second;
}
}



protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
{
if (PropertyChanged != null)
PropertyChanged(this, args);
}
}



请原谅这两段程序的诸多错误,我主要还是参考别人的程序来写,对C#的架构不这么了解。我想问的是,如何在多线程下和多线程外都能修改Class1这个类。我的面板上的显示控件式与这个Class1有数据绑定的。然后实现多线程下刷新数据的作用。
...全文
6523 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
伊顺鸣 2014-12-15
  • 打赏
  • 举报
回复
什么情况的。
MarkWoo1945 2014-12-12
  • 打赏
  • 举报
回复
test reply hehe
nettman 2014-12-12
  • 打赏
  • 举报
回复
进来学习下
CodeC 2014-12-12
  • 打赏
  • 举报
回复
挺好的,我最近也在学
skybabyNN 2014-12-11
  • 打赏
  • 举报
回复
挺好的,我最近也在学
#blackheart 2014-12-11
  • 打赏
  • 举报
回复
引用 5 楼 ZHOUTUO08 的回复:
[quote=引用 3 楼 NianHui 的回复:] 出错了?应该不会先跨线程的错误吧,binding自身可以处理多线程间的访问的。
我是看到数据绑定好像可以跨线程,更新数据的,所以才这么搞的。其实我的问题挺简单的,就是我建了个类,然后如何在多个CS文件下访问这个类的数据,及修改它。以前都不跨CS所以只用new新建来做缓存。[/quote] 什么事多个CS???你想说的是在其他类中访问同一份数据是吧。 单件模式正好满足你需要。具体的写法网上一大推,自己找吧。 插播点题外话,C#的编译器是不在乎你的文件名和类名是否一样,以及一个类也是可以分别写在多个文件中的、一个文件中也可以写多个类的。
qq_24411225 2014-12-11
  • 打赏
  • 举报
回复
最近也在学这个
米落 2014-12-11
  • 打赏
  • 举报
回复
引用 3 楼 NianHui 的回复:
出错了?应该不会先跨线程的错误吧,binding自身可以处理多线程间的访问的。
我是看到数据绑定好像可以跨线程,更新数据的,所以才这么搞的。其实我的问题挺简单的,就是我建了个类,然后如何在多个CS文件下访问这个类的数据,及修改它。以前都不跨CS所以只用new新建来做缓存。
beyondma 2014-12-11
  • 打赏
  • 举报
回复
个人建议加上BEGININVOKE,比较好。
#blackheart 2014-12-09
  • 打赏
  • 举报
回复
出错了?应该不会先跨线程的错误吧,binding自身可以处理多线程间的访问的。
vbfool 2014-12-08
  • 打赏
  • 举报
回复
改值没啥问题,它本身不涉及线程,你随便怎么改,但是你要知道,触发PropertyChanged事件这事,必须要在UI线程才行,所以一般MVVM框架都会自带这些方法。 想要正常使用,只要保证你的PropertyChanged在UI线程上执行就可以了,你可以修改一下你的OnPropertyChanged方法,把UI的Dispatcher传进来,然后BeginInvoke。
愤怒的猪头君 2014-12-08
  • 打赏
  • 举报
回复
这样应该执行不了,对Second的修改会影响到ui,所以必须在ui线程,在wp里面,无论new 一个thread还是task都会默认在后台线程执行,只能把对thread的赋值放到dispatcher.begininvoke()里面,注意前面这个函数会将切换到ui但是在你new的这个task里面是异步的,想要同步执行需要一些线程锁来辅助控制,比较方便的传统的可以用AutoResetEvent,新的解决方案是 TaskCompletionSource,具体的百度吧

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧