c#关于点击按钮,后台老板按钮事件中写循环1到100000,让前台的label也显示出当前循环的值
c#关于点击按钮,后台按钮事件中写循环1到100000,让前台的label也显示出当前循环的值。
ASP.NET web程序, 我在一个按钮的事件中, 写了一个循环, 从1循环到100000,然后在前台用一个label显示当前循环的值,比如说当循环到100的时候, label能显示100。
这是我的部分源码 :
前台:
<asp:Label ID="lb_wait" runat="server" Text=""></asp:Label>
<asp:Button ID="bt_sc" runat="server" Text="导入" onclick="bt_sc_Click" />
后台:
protected void bt_sc_Click(object sender, EventArgs e)
{
int count=100000;
for (int i = 0; i < count; i++)
{
lb_wait.Text = (i + 1).ToString();
}
}
可是发现实现不了,当点击了按钮后,label会等程序执行完后才显示, 那时候已经显示100000了, 我想要的是想当点击按钮的时候, 每循环一次,然后label的值就改变一次并且在页面能显示看得到,其实我是想自己动手做的类似进度条的了。。。
嗯,昨天问了一次, 感觉问的有点不明所以, 所以今天重新发帖问下大家了。
昨天有哥们给我说用线程做, 然后按照他说的自己写了代码, 前台不变,后台如下。
protected void bt_sc_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(DO));
thread.IsBackground = true;
thread.Start();
}
public void DO()
{
int count=1000001;
for (int i = 0; i < count; i++)
{
CrossThreadCalls.SafeInvoke(this.lb_wait, new CrossThreadCalls.TaskDelegate(delegate()
{
lb_wait.Text = (i + 1).ToString();
}));
}
}
这段代码出现了问题,报错说CrossThreadCalls不存在,是否缺少引用,如图:
当我这样隐藏的时候:
//CrossThreadCalls.SafeInvoke(this.lb_wait, new CrossThreadCalls.TaskDelegate(delegate()
//{
lb_wait.Text = (i + 1).ToString();
//}));
然后可以运行程序了,发现点击一下按钮, 不是按照从1循环到100000来显示的, 而是每点击下按钮, label显示不同的数字。。。
嗯, 现在我就是想请各位能帮下我 ,点击按钮,后台1循环100000,前台的label显示出当前循环的值. 能给我源码最好了,然后我自己去慢慢消化,带注释最好的了。
请原谅我这个菜鸟这么磨叽。。。
------解决方案--------------------
你现在是循环已经放到线程里了,就差显示,是吧
查:委托操作UI
有现成的代码和讲解,复制粘贴就行了
------解决方案--------------------
你百度下 多线程 UI交互 应该有蛮多例子
ASP.NET web程序, 我在一个按钮的事件中, 写了一个循环, 从1循环到100000,然后在前台用一个label显示当前循环的值,比如说当循环到100的时候, label能显示100。
这是我的部分源码 :
前台:
<asp:Label ID="lb_wait" runat="server" Text=""></asp:Label>
<asp:Button ID="bt_sc" runat="server" Text="导入" onclick="bt_sc_Click" />
后台:
protected void bt_sc_Click(object sender, EventArgs e)
{
int count=100000;
for (int i = 0; i < count; i++)
{
lb_wait.Text = (i + 1).ToString();
}
}
可是发现实现不了,当点击了按钮后,label会等程序执行完后才显示, 那时候已经显示100000了, 我想要的是想当点击按钮的时候, 每循环一次,然后label的值就改变一次并且在页面能显示看得到,其实我是想自己动手做的类似进度条的了。。。
嗯,昨天问了一次, 感觉问的有点不明所以, 所以今天重新发帖问下大家了。
昨天有哥们给我说用线程做, 然后按照他说的自己写了代码, 前台不变,后台如下。
protected void bt_sc_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(DO));
thread.IsBackground = true;
thread.Start();
}
public void DO()
{
int count=1000001;
for (int i = 0; i < count; i++)
{
CrossThreadCalls.SafeInvoke(this.lb_wait, new CrossThreadCalls.TaskDelegate(delegate()
{
lb_wait.Text = (i + 1).ToString();
}));
}
}
这段代码出现了问题,报错说CrossThreadCalls不存在,是否缺少引用,如图:
当我这样隐藏的时候:
//CrossThreadCalls.SafeInvoke(this.lb_wait, new CrossThreadCalls.TaskDelegate(delegate()
//{
lb_wait.Text = (i + 1).ToString();
//}));
然后可以运行程序了,发现点击一下按钮, 不是按照从1循环到100000来显示的, 而是每点击下按钮, label显示不同的数字。。。
嗯, 现在我就是想请各位能帮下我 ,点击按钮,后台1循环100000,前台的label显示出当前循环的值. 能给我源码最好了,然后我自己去慢慢消化,带注释最好的了。
请原谅我这个菜鸟这么磨叽。。。
------解决方案--------------------
你现在是循环已经放到线程里了,就差显示,是吧
查:委托操作UI
有现成的代码和讲解,复制粘贴就行了
------解决方案--------------------
你百度下 多线程 UI交互 应该有蛮多例子