WPF多线程出现UI卡顿,求救!!!

mylibin 2015-04-09 02:08:39
第一次用WPF,被多线程搞死了。写的代码出现了UI卡顿现象,求解救。多线程是从网上找的代码,和WInform用法,完成不同。是不是写的不对,求帮助。

int MaxID = 0;
int MinID = 0;
Thread oldThread;
Thread newThread;
DataTable all = new DataTable();
public MainWindow()
{
InitializeComponent();
//this.Title = GetApp.GetValue("Title");
oldThread = new Thread(new ThreadStart(OldDispatcherThread));
oldThread.IsBackground = true;
newThread = new Thread(new ThreadStart(NewDispatcherThread));
newThread.IsBackground = true;
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
//拉取当前10条数据
bindInit();

//获取老信息
oldThread.Start();
newThread.Start();
}
public void OldDispatcherThread()
{
//可以通过循环条件来控制UI的更新
while (true)
{
///线程优先级,最长超时时间,方法委托(无参方法)
listBox1.Dispatcher.Invoke(DispatcherPriority.Normal, TimeSpan.FromSeconds(1), new Action(NextData));
Thread.Sleep(3000);
}
}
public void NewDispatcherThread()
{
//可以通过循环条件来控制UI的更新
while (true)
{
///线程优先级,最长超时时间,方法委托(无参方法)
listBox1.Dispatcher.Invoke(DispatcherPriority.Normal, TimeSpan.FromSeconds(1), new Action(PreData));
Thread.Sleep(3000);
}
}
private void NextData()
{
bindData("info_id<" + MaxID, 2);
}
private void PreData()
{

}

private void bindInit()
{
//执行这个方法的时候,开始出现UI卡顿现象
string backStr = api.GetALLWLInfoData("", 10);
if (backStr != "")
{
all = GetSerializable(backStr) as DataTable;
}
if (all != null && all.Rows.Count > 0)
{
MaxID = int.Parse(all.Rows[all.Rows.Count - 1]["info_id"].ToString());
MinID = int.Parse(all.Rows[0]["info_id"].ToString());

listBox1.DataContext = all;
}
}

private void bindData(string filter,int source)
{
string backStr = api.GetALLWLInfoData(filter, 10);
DataTable dt = new DataTable();
if (backStr != "")
{
dt = GetSerializable(backStr) as DataTable;
}
if (dt != null && dt.Rows.Count > 0)
{
switch (source)
{
case 1:
MinID = int.Parse(all.Rows[0]["info_id"].ToString());
break;
case 2:
MaxID = int.Parse(all.Rows[all.Rows.Count - 1]["info_id"].ToString());
foreach (DataRow dr in dt.Rows)
all.ImportRow(dr);
//没有老数据,关闭拉取老数据进程
if (dt.Rows.Count == 0)
oldThread.Abort();
break;
default:
break;
}
//listBox1.DataContext = all;
}
}

/// <summary>
/// 对象反序列化
/// </summary>
/// <param name="str">序列化字符串</param>
/// <returns></returns>
public object GetSerializable(string str)
{
IFormatter formatter = new BinaryFormatter();
byte[] buffer = Convert.FromBase64String(str);
MemoryStream stream = new MemoryStream(buffer);
object obj = formatter.Deserialize(stream);
stream.Flush();
stream.Close();

return obj;
}
...全文
250 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
exception92 2015-04-10
  • 打赏
  • 举报
回复
搜索 WPF Dispatcher

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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