8,735
社区成员
发帖
与我相关
我的任务
分享
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;
}