关于UI线程的问题

pepsl6686022 2012-07-16 07:49:55
做了一个欢迎界面 里面就加了俩个空间一个 progressbar还有一个label label的Text属性设置为:数据正在加载,请稍后
namespace pdaxfjx.WinForm
{
Thread t = null;
public partial class LoadForm : Form
{
public LoadForm()
{
InitializeComponent();
}

private void LoadData()
{
t = new Thread(new ThreadStart(run));
t.start();
//这里是数据处理的方法没处理一条信息 progressbar.value 就+1
。。。。。。
//数据加载完成之后,改变label的Text属性激活Textchange事件
label1.text = "数据加载成功";
}
private void run()
{
this.Inovke(method);
}
private void method()
{
int i = 1;
while(true)
{

label1.text += ".";
i++;
Thread.sleep(3000);
if (i = 3)
break;
}
}

private void label1_TextChanged(object sender, EventArgs e)
{
Login login = new Login();
login.ShowDialog();
this.Close();
}
}
没有错误 ,就是 界面不显示,只显示一个进度条 一点一点在加 然后就跳到登陆页面了 label也没有显示 不知道什么原因
在网上差了一些关于非UI线程控制空间属性的资料,没怎么看明白。希望大神帮忙给段代码示例 做做参考。大致意思就是页面一边处理数据 处理的数据来控制progressBar的进度,一边把整个FORM 加载完成 最起码先把页面加载完成之后再 让progressBar一点一点的根据数据的完成度来增加。
...全文
134 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckl881003 2012-07-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

逻辑混乱,代码更乱。。。
你在method方法里把label的文字改了,那不就直接跳了。。。
[/Quote]
确实,乱。。不想仔细看了。问题蛮多。lz在改改吧
pepsl6686022 2012-07-17
  • 打赏
  • 举报
回复
各位不好意思啊 却是写的挺乱,其实我意思很简单 就是在FORM load事件中 放入数据处理的方法,然后直接跳转界面,可如何 让在数据处理之前就让 本页面显示出来。这是我原来的代码。
using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using Con = System.Data.SqlServerCe.SqlCeConnection;
using Exp = System.Data.SqlServerCe.SqlCeException;
using Cmd = System.Data.SqlServerCe.SqlCeCommand;
using Rda = System.Data.SqlServerCe.SqlCeRemoteDataAccess;
using DataAdpt = System.Data.SqlServerCe.SqlCeDataAdapter;
using DataReader = System.Data.SqlServerCe.SqlCeDataReader;

namespace pdaxfjx.WinForm
{
public partial class LoadForm : Form
{
//Thread t = null;
database.DataBase db = new database.DataBase();
Con conn = DB.SQLCE.DB_Conn(COMMON.Sys.g_DBconn);
//private delegate void controlInvoke();
public LoadForm()
{
InitializeComponent();
}

private void LoadForm_Load(object sender, EventArgs e)
{
if (DB.SQLCE.IsInternetConnected() == true)
{
//this.Invoke(new controlInvoke(LoadData));
LoadData();
}
else
{
MessageBox.Show("网络连接不正常,数据加载失败请稍后再试");
}
}


private void LoadData()
{
// t = new Thread(new ThreadStart(run));
// t.Start();
try
{
if (DB.SQLCE.CreateDB(conn, COMMON.Sys.g_DBPath, COMMON.Sys.g_DBconn))
{
//下载用户信息
DB.SQLCE.Pull_TB("select * from SYS_USERINFOR", "SYS_USERINFOR",
COMMON.Sys.g_DBconn, DB.SQLCE.CreatRDA(COMMON.Sys.g_InternetUrl, COMMON.Sys.g_DBconn),
COMMON.Sys.g_rdaOleDbConnectString);
progressBar1.Value = 1;
//下载用户权限信息
DB.SQLCE.Pull_TB("select * from sys_user_right", "sys_user_right",
COMMON.Sys.g_DBconn, DB.SQLCE.CreatRDA(COMMON.Sys.g_InternetUrl, COMMON.Sys.g_DBconn),
COMMON.Sys.g_rdaOleDbConnectString);
progressBar1.Value = 2;
//下载机车状态信息
DB.SQLCE.Pull_TB("select * from JX_SHOW_LOCSTATUS", "JX_SHOW_LOCSTATUS",
COMMON.Sys.g_DBconn, DB.SQLCE.CreatRDA(COMMON.Sys.g_InternetUrl, COMMON.Sys.g_DBconn),
COMMON.Sys.g_rdaOleDbConnectString);
progressBar1.Value = 3;
//下载界面模块名称信息
DB.SQLCE.Pull_TB("select * from sys_filename", "sys_filename",
COMMON.Sys.g_DBconn, DB.SQLCE.CreatRDA(COMMON.Sys.g_InternetUrl, COMMON.Sys.g_DBconn),
COMMON.Sys.g_rdaOleDbConnectString);
progressBar1.Value = 4;
//下载物料申请消息信息
DB.SQLCE.Pull_TB("select * from JX_LSBILLMESSAGE", "JX_LSBILLMESSAGE",
COMMON.Sys.g_DBconn, DB.SQLCE.CreatRDA(COMMON.Sys.g_InternetUrl, COMMON.Sys.g_DBconn),
COMMON.Sys.g_rdaOleDbConnectString);
progressBar1.Value = 5;
//下载故障信息表信息
DB.SQLCE.Pull_TB("select * from sys_fault1", "sys_fault1",
COMMON.Sys.g_DBconn, DB.SQLCE.CreatRDA(COMMON.Sys.g_InternetUrl, COMMON.Sys.g_DBconn),
COMMON.Sys.g_rdaOleDbConnectString);
progressBar1.Value = 6;
//下载机车范围活项信息
DB.SQLCE.Pull_TB("select * from JX_OPER_FWBILL", "JX_OPER_FWBILL",
COMMON.Sys.g_DBconn, DB.SQLCE.CreatRDA(COMMON.Sys.g_InternetUrl, COMMON.Sys.g_DBconn),
COMMON.Sys.g_rdaOleDbConnectString);
progressBar1.Value = 7;
//下载机车提票活项信息
DB.SQLCE.Pull_TB("select * from JX_OPER_JTBILL", "JX_OPER_JTBILL",
COMMON.Sys.g_DBconn, DB.SQLCE.CreatRDA(COMMON.Sys.g_InternetUrl, COMMON.Sys.g_DBconn),
COMMON.Sys.g_rdaOleDbConnectString);
progressBar1.Value = 8;
//下载机车试验信息
DB.SQLCE.Pull_TB("select * from JX_OPER_TESTITEM", "JX_OPER_TESTITEM",
COMMON.Sys.g_DBconn, DB.SQLCE.CreatRDA(COMMON.Sys.g_InternetUrl, COMMON.Sys.g_DBconn),
COMMON.Sys.g_rdaOleDbConnectString);
progressBar1.Value = 9;
//下载材料信息CLGL_GOODSOUTINFO
DB.SQLCE.Pull_TB("select * from CLGL_GOODSOUTINFO", "CLGL_GOODSOUTINFO",
COMMON.Sys.g_DBconn, DB.SQLCE.CreatRDA(COMMON.Sys.g_InternetUrl, COMMON.Sys.g_DBconn),
COMMON.Sys.g_rdaOleDbConnectString);
progressBar1.Value = 10;
//下载材料信息SYS_XFX_FWZD
DB.SQLCE.Pull_TB("select * from SYS_XFX_FWZD", "SYS_XFX_FWZD",
COMMON.Sys.g_DBconn, DB.SQLCE.CreatRDA(COMMON.Sys.g_InternetUrl, COMMON.Sys.g_DBconn),
COMMON.Sys.g_rdaOleDbConnectString);
progressBar1.Value = 11;
//和服务器同步本地时间
string nowtime = db.timeserver();
database.WinAPI.SetSysTime(Convert.ToDateTime(nowtime));

label1.Text = "数据同步成功";

Login login = new Login();
login.ShowDialog();
this.Close();
}
}
catch(Exception e)
{
MessageBox.Show(e.Message);
MessageBox.Show("数据同步失败");

}

}
//private void run()
//{
// this.Invoke(new Method(method));
//}
//private delegate void Method();
//private void method()
//{
// int i = 1;
// while (true)
// {
// label1.Text += ".";
// i++;
// Thread.Sleep(3000);
// if (i == 3)
// break;

// }
//}
}
}
我之前也用过线程 ,也用过INOVKE 都没成功,说实话 真是不太会用,还请各位帮帮小弟,菜鸟真心求助。
xiehuanxie 2012-07-16
  • 打赏
  • 举报
回复
逻辑混乱,代码更乱。。。
你在method方法里把label的文字改了,那不就直接跳了。。。
nonocast 2012-07-16
  • 打赏
  • 举报
回复
BackgroundWorker can help you.
焱龍皇 2012-07-16
  • 打赏
  • 举报
回复
异步调用

110,545

社区成员

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

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

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