请教各位前辈有关WPF相关问题,谢谢!!

maoweiying88 2014-06-13 10:24:20
还请各位大牛指导下下面两个问题,非常感谢!!!!
1. 使用的开发工具是VS 2010的WPF,基于TabControl创建了3个TabItem(分别称为T1、T2、T3),其中在T2项中创建了以
下:
<TabItem Name="RadarAScope" Header="AScope">
<Grid Name="RadarAScopeGrid"></Grid>
</TabItem>
在C#初始化流程的this.InitializeComponent();后面增加了绘制坐标系的代码
// AScope图表控件
Chart m_AScopeChart = new Chart();

// 设置RadarAScope内容
m_AScopeChart.Width = 500;
m_AScopeChart.MaxWidth = 500;

// Create a new Axis
Axis axisX = new Axis();
axisX.IntervalType = IntervalTypes.Number;
m_AScopeChart.AxesX.Add(axisX);

Axis axisY = new Axis();
axisY.IntervalType = IntervalTypes.Number;
m_AScopeChart.AxesY.Add(axisY);
m_AScopeChart.AnimationEnabled = false;
m_AScopeChart.ScrollingEnabled = false;
RadarAScopeGrid.Children.Add(m_AScopeChart);
程序运行后,默认是显示T1项,通过鼠标切换到T2,或者在其他控件按钮对T2进行Focus(),会出现短时间的卡顿,之后
再怎么切换,或者通过其他按钮激活,都不会出现卡顿现象,请问这是什么原因,如何解决??
2. 现在需要在上面的坐标系中描点画条状图,基于某个控件来激活,方式如下:
DataSeries data = new DataSeries();
int iDataNum = 2000;
for (int i = 0; i < iDataNum; ++i)
{
DataPoint tDataPoint = new DataPoint();
tDataPoint.XValue = i;
tDataPoint.YValue = 随机值;
data.DataPoints.Add(tDataPoint);
}
m_AScopeChart.Series.Add(data);
这样会阻塞UI线程的执行,尝试将上面的流程搬到后台线程,提示DataSeries不能在非UI线程中使用,请问如何解决这个画图效率问题,谢谢!!
...全文
86 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
maoweiying88 2014-06-14
  • 打赏
  • 举报
回复
对于第二个问题,大侠的意思是: 先设置使用CheckForIllegalCrossThreadCalls = false,然后在子线程上,使用可靠的访问方法来操作UI线程。
maoweiying88 2014-06-14
  • 打赏
  • 举报
回复
1. 但是程序运行后,我等了很长时间,只要第一次切换,或者通过其他方式激活T2,都会出现卡顿。 2. 我用的就是起子线程传入参,然后BeginInvoke访问UI线程。 关键是运行时报错 DataSeries不能再非UI线程操作,我之前按网上修改线程的属性,好像变成statics类型的了,运行时入参也变 得有问题。
wangnaisheng 2014-06-13
  • 打赏
  • 举报
回复
1.有可能是T2的内容为加载完成。 2.阻塞UI线程的解决方法,两种方法: 1.使用CheckForIllegalCrossThreadCalls = false; // 允许线程访问界面 2.使用回调线程访问也就是http://zhidao.baidu.com/question/131214336.html?si=6 所提到的,参考:http://msdn.microsoft.com/zh-cn/library/6x4c42hc(VS.95).aspx

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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