为什么NET3.5下载以后android弹出进度条这个窗口,等到进度条满了,窗口就消失了,然后什么也没有发生,安装不了

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
控件名称分别为:
progressBar1;label1;textBox1;button1;
第二步:定义一个代理,用于更新ProgressBar的值(Value)及在执行方法的时候,返回方法的处理信息。
&&&&&&& private delegate void SetPos(int ipos,string vinfo);//代理
第三步:进度条值更新函数(参数必须跟声明的代理参数一样)
&&&&&&& private void SetTextMesssage(int ipos,string vinfo)&&&&&&& {&&&&&&&&&&& if (this.InvokeRequired)&&&&&&&&&&& {&&&&&&&&&&&&&&& SetPos setpos = new SetPos(SetTextMesssage);&&&&&&&&&&&&&&& this.Invoke(setpos, new object[] { ipos,vinfo });&&&&&&&&&&& }&&&&&&&&&&& else&&&&&&&&&&& {&&&&&&&&&&&&&&& this.label1.Text = ipos.ToString() + "/1000";&&&&&&&&&&&&&&& this.progressBar1.Value = Convert.ToInt32(ipos);&&&&&&&&&&&&&&& this.textBox1.AppendText(vinfo);&&&&&&&&&&& }&&&&&&& }
第四步:函数实现
&&&&&&& private void button1_Click(object sender, EventArgs e)&&&&&&& {&&&&&&&&&&& Thread fThread = new Thread(new ThreadStart(SleepT));&&&&&&&&&&& fThread.Start();&&&&&&& }
第五步:新的线程执行函数:
&&&&&&& private void SleepT()&&&&&&& {&&&&&&&&&&& for (int i = 0; i & 500; i++)&&&&&&&&&&& {&&&&&&&&&&&&&&& System.Threading.Thread.Sleep(10);&&&&&&&&&&&&&&& SetTextMesssage(100*i/500,i.ToString()+"\r\n");&&&&&&&&&&& }&&&&&&& }
程序运行效果图:
=========================================================================================
2、第二种方法:
&&&&&功能描述:该种方法通过控件backgroundWorker1实现,进度条。却进度条在一个模板窗体内。
第一步:主窗体设计:
&控件名称:
button1;backgroundWorker1;
对backgroundWorker1控件,属性设置:
&第二步:主页面后台代码:
using System.T//引用空间名称
&&&&&&& private void button1_Click(object sender, EventArgs e)&&&&&&& {&&&&&&&&&&& this.backgroundWorker1.RunWorkerAsync(); // 运行 backgroundWorker 组件
&&&&&&&&&&& ProcessForm form = new ProcessForm(this.backgroundWorker1);// 显示进度条窗体 &&&&&&&&&&& form.ShowDialog(this);&&&&&&&&&&& form.Close();&&&&&&& }
&&&&&&& private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)&&&&&&& {&&&&&&&&&&& if (e.Error != null)&&&&&&&&&&& {&&&&&&&&&&&&&&& MessageBox.Show(e.Error.Message);&&&&&&&&&&& }&&&&&&&&&&& else if (e.Cancelled)&&&&&&&&&&& {&&&&&&&&&&& }&&&&&&&&&&& else&&&&&&&&&&& {&&&&&&&&&&& }&&&&&&& }&&&&&&& //你可以在这个方法内,实现你的调用,方法等。&&&&&&& private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)&&&&&&& {&&&&&&&&&&& BackgroundWorker worker = sender as BackgroundW&&&&&&&&&&& for (int i = 0; i & 100; i++)&&&&&&&&&&& {&&&&&&&&&&&&&&& Thread.Sleep(100);&&&&&&&&&&&&&&& worker.ReportProgress(i);&&&&&&&&&&&&&&& if (worker.CancellationPending)& // 如果用户取消则跳出处理数据代码 &&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& e.Cancel =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&& }分别为button控件和backgroundWorker1控件选好事件。
第三步:设置子窗体(及显示进度条的窗体):
控件名称:
progressBar1;button1
第四步:子窗体,后台代码:
&&&&&&&& private BackgroundWorker backgroundWorker1; //ProcessForm 窗体事件(进度条窗体)
&&&&&&& public ProcessForm(BackgroundWorker backgroundWorker1)&&&&&&& {&&&&&&&&&&& InitializeComponent();
&&&&&&&&&&& this.backgroundWorker1 = backgroundWorker1;&&&&&&&&&&& this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);&&&&&&&&&&& this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);&&&&&&& }
&&&&&&& void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)&&&&&&& {&&&&&&&&&&& //this.Close();//执行完之后,直接关闭页面&&&&&&& }
&&&&&&& void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)&&&&&&& {&&&&&&&&&&& this.progressBar1.Value = e.ProgressP&&&&&&& }
&&&&&&& private void button1_Click(object sender, EventArgs e)&&&&&&& {&&&&&&&&&&& this.backgroundWorker1.CancelAsync();&&&&&&&&&&& this.button1.Enabled =&&&&&&&&&&& this.Close();&&&&&&& }&&& }
只为button选好事件&
执行效果为:
&=================================================================================================
3、第三种方法:
&&&& 功能描述:在处理大量数据的时候,有时候方法的执行需要一定的时间,这时候往往会造成页面或程序的“假死”状态,给用户的体验度也不是很好。为了避免出现“假死”提高用户的体验度,在这里为这类型的方法加了一个进度条和一个文本框,进度条用于显示程序处理的进度,文本框用于显示在处理过程中,给与的提示。本方法主要使用了控件:backgroundWorker1;说明:本方法与上面的方法(方法二)基本类型,主要是设计和代码进行了一些修改。
&第一步:主窗体设计:&
控件名称:
button1;backgroundWorker1;
对backgroundWorker1控件,属性设置:
第二步:主窗体 后台代码:
&&&&&&& private void button1_Click(object sender, EventArgs e)&&&&&&& {&&&&&&&&&&& this.backgroundWorker1.RunWorkerAsync(); // 运行 backgroundWorker 组件
&&&&&&&&&&& ProcessForm form = new ProcessForm(this.backgroundWorker1);// 显示进度条窗体 &&&&&&&&&&& form.ShowDialog(this);&&&&&&&&&&& form.Close();&&&&&&& }
&&&&&&& private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)&&&&&&& {&&&&&&&&&&& if (e.Error != null)&&&&&&&&&&& {&&&&&&&&&&&&&&& MessageBox.Show(e.Error.Message);&&&&&&&&&&& }&&&&&&&&&&& else if (e.Cancelled)&&&&&&&&&&& {&&&&&&&&&&& }&&&&&&&&&&& else&&&&&&&&&&& {&&&&&&&&&&& }&&&&&&& }&&&&&&& //你可以在这个方法内,实现你的调用,方法等。&&&&&&& private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)&&&&&&& {&&&&&&&&&&& BackgroundWorker worker = sender as BackgroundW&&&&&&&&&&& for (int i = 0; i & 100; i++)&&&&&&&&&&& {&&&&&&&&&&&&&&& Thread.Sleep(100);&&&&&&&&&&&&&&& worker.ReportProgress(i, i.ToString() + "& 你好!\r\n"); //注意:这里向子窗体返回信息值,这里是两个值,一个用于进度条,一个用于文本框的。&&&&&&&&&&&&&&& if (worker.CancellationPending)& // 如果用户取消则跳出处理数据代码 &&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& e.Cancel =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&& }
第三步:设置子窗体(及显示进度条的窗体):
progressBar1;textBox1;button1
第四步:子窗体后台代码:
&&&&&&& private BackgroundWorker backgroundWorker1; //ProcessForm 窗体事件(进度条窗体)
&&&&&&& public ProcessForm(BackgroundWorker backgroundWorker1)&&&&&&& {&&&&&&&&&&& InitializeComponent();
&&&&&&&&&&& this.backgroundWorker1 = backgroundWorker1;&&&&&&&&&&& this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);&&&&&&&&&&& this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);&&&&&&& }
&&&&&&& void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)&&&&&&& {&&&&&&&&&&& //this.Close();//执行完之后,直接关闭页面&&&&&&& }
&&&&&&& void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)&&&&&&& {&&&&&&&&&&& this.progressBar1.Value = e.ProgressP&&&&&&&&&&& this.textBox1.AppendText(e.UserState.ToString());//主窗体传过来的值,通过e.UserState.ToString()来接受&&&&&&& }
&&&&&&& private void button1_Click(object sender, EventArgs e)&&&&&&& {&&&&&&&&&&& this.backgroundWorker1.CancelAsync();&&&&&&&&&&& this.button1.Enabled =&&&&&&&&&&& this.Close();&&&&&&& }
实现的效果:
注意:如果在程序为执行完,就点击取消的话,很有可能会报错的,这时候,你就修改一个方法:backgroundWorker1_ProgressChanged
&&&&&&& void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)&&&&&&& {&&&&&&&&&&& this.progressBar1.Value = e.ProgressP&&&&&&&&&&& this.textBox1.Text += e.UserState.ToString(); //主窗体传过来的值,通过e.UserState.ToString()来接受&&&&&&& }
&&&&&& 把这个方法,替换上边的那个方法,就可以了。
=====================================================================================================
4、第四种方法:
&&&& 功能描述:本方法实现进度条显示,方法执行信息反馈显示。用到的技术点为 线程与代理。
&&& 步骤一:添加主页面。
控件名称:
& 步骤二:主页面后台代码
&&&&&&& using System.T//引用此命名
&&&&&&& //创建代理。
&&&&&&& private Form6 myProcessBar =//弹出的子窗体(用于显示进度条)&&&&&&& private delegate bool IncreaseHandle(int nValue,string vinfo);//代理创建&&&&&&& private IncreaseHandle myIncrease =//声明代理,用于后面的实例化代理&&&&&&& private int vMax = 100;//用于实例化进度条,可以根据自己的需要,自己改变
&&&&&&& private void button1_Click(object sender, EventArgs e)&&&&&&& {&&&&&&&&&&& Thread thdSub = new Thread(new ThreadStart(ThreadFun));&&&&&&&&&&& thdSub.Start();&&&&&&& }
&&&&&&& private void ThreadFun()&&&&&&& {&&&&&&&&&&& MethodInvoker mi = new MethodInvoker(ShowProcessBar);&&&&&&&&&&& this.BeginInvoke(mi);
&&&&&&&&&&& Thread.Sleep(100);&&&&&&&&&&& object objReturn =&&&&&&&&&&& for (int i = 0; i & vM i++)&&&&&&&&&&& {&&&&&&&&&&&&&&& objReturn = this.Invoke(this.myIncrease, new object[] { 2, i.ToString() + "\r\n" });&&&&&&&&&&&&&&& Thread.Sleep(50);&&&&&&&&&&& }&&&&&&& }
&&&&&&& private void ShowProcessBar()&&&&&&& {&&&&&&&&&&& myProcessBar = new Form6(vMax);&&&&&&&&&&& myIncrease = new IncreaseHandle(myProcessBar.Increase);&&&&&&&&&&& myProcessBar.ShowDialog();&&&&&&&&&&& myProcessBar =&&&&&&& }
步骤三:创建子窗体
&控件名称:
progressBar1;textBox1
步骤四:子窗体,后台代码
&&&&&&& public Form6(int vMax)&&&&&&& {&&&&&&&&&&& InitializeComponent();
&&&&&&&&&&& this.progressBar1.Maximum = vM&&&&&&& }
&&&&&&& public bool Increase(int nValue,string nInfo)&&&&&&& {&&&&&&&&&&& if (nValue & 0)&&&&&&&&&&& {&&&&&&&&&&&&&&& if (progressBar1.Value + nValue & progressBar1.Maximum)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& progressBar1.Value += nV&&&&&&&&&&&&&&&&&&& this.textBox1.AppendText(nInfo);&&&&&&&&&&&&&&&&&&& Application.DoEvents();&&&&&&&&&&&&&&&&&&& progressBar1.Update();&&&&&&&&&&&&&&&&&&& progressBar1.Refresh();&&&&&&&&&&&&&&&&&&& this.textBox1.Update();&&&&&&&&&&&&&&&&&&& this.textBox1.Refresh();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& else&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& progressBar1.Value = progressBar1.M&&&&&&&&&&&&&&&&&&& this.textBox1.AppendText(nInfo);&&&&&&&&&&&&&&&&&&& //this.Close();//执行完之后,自动关闭子窗体&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&&&&&&&&&&&&& }
执行效果:
阅读(28172)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'实现winfrom进度条及进度信息提示,winfrom程序假死处理',
blogAbstract:'
1、方法一:使用线程
&&&& 功能描述:在用c#做WinFrom开发的过程中。我们经常需要用到进度条(ProgressBar)用于显示进度信息。这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口很容易假死(无法适时看到进度信息)。下面我就简单结合一个我写的例子给大家做一个介绍。
第一步:设计界面,注意需要引用 using System.T
控件名称分别为:
progressBar1;label1;textBox1;button1;
第二步:定义一个代理,用于更新ProgressBar的值(Value)及在执行方法的时候,返回方法的处理信息。',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:6,
publishTime:7,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:6,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}多线程:C#.NET中使用BackgroundWorker在模态对话框中显示进度条
来源:博客园
  我们使用C#.NET编写WinForm程序时,有时候为了实现在模态对话框中实时显示后台操作的进度,这个时候需要借助于多线程操作在子窗体中显示进度条状态,在父窗体中进行后台操作。你可以在Thread类中自己创建两个线程以完成这个操作,不过C#.NET提供了BackgroundWorker对象可以帮助我们非常方便地来实现这个过程。有关Backgroundworker对象的时候我在“”一文中有过介绍,大家可以去看看。 &#13;  这里是一个示例,其中展示了如何使用Backgroundworker对象在模态对话框中显示后台操作的实时进度条。&#13;  首先是主窗体代码:&#13;&#13; 1 using S 2 using System.Collections.G 3 using ponentM 4 using System.D 5 using System.D 6 using System.L 7 using System.T 8 using System.Windows.F 9 using System.T<span style="color: # <span style="color: # namespace ModalProgressDialog<span style="color: # {<span style="color: #
public partial class Form1 : Form<span style="color: #
{<span style="color: #
protected BackgroundWorker worker = new BackgroundWorker();<span style="color: #
protected Form2 frm = new Form2();<span style="color: # <span style="color: #
public Form1()<span style="color: #
{<span style="color: #
worker.DoWork += new DoWorkEventHandler(worker_DoWork);<span style="color: #
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);<span style="color: #
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);<span style="color: # <span style="color: #
InitializeComponent();<span style="color: #
}<span style="color: # <span style="color: #
private void button1_Click(object sender, EventArgs e)<span style="color: #
{<span style="color: #
worker.WorkerReportsProgress = true;
<span style="color: #
worker.RunWorkerAsync();<span style="color: #
frm.ShowDialog();<span style="color: #
}<span style="color: # <span style="color: #
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)<span style="color: #
{<span style="color: #
frm.Close();<span style="color: #
MessageBox.Show("Done");<span style="color: #
}<span style="color: # <span style="color: #
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)<span style="color: #
{<span style="color: #
frm.ProgressValue = e.ProgressP<span style="color: #
}<span style="color: # <span style="color: #
void worker_DoWork(object sender, DoWorkEventArgs e)<span style="color: #
{<span style="color: #
CountTheTime();<span style="color: #
}<span style="color: # <span style="color: #
private void CountTheTime()<span style="color: #
{<span style="color: #
int initialValue = <span style="color: #0; <span style="color: #
for (int count = <span style="color: #; count & initialV count = count + <span style="color: #) <span style="color: #
{ <span style="color: #
Thread.Sleep(<span style="color: #00);<span style="color: #
worker.ReportProgress(count); <span style="color: #
}<span style="color: #
}<span style="color: #
}<span style="color: # }&#13; &#13;  主窗体中只有一个按钮,当被点击时,会由BackgroundWorker对象以异步的方式去执行一个假象的后台操作CountTheTime方法。CountTheTime方法从0到100以步长为2每隔1秒更新一下进度条状态,因此这个假象的后台操作大约会持续50秒左右的时间。当程序执行时,进度条指示窗口以模态对话框的形式被弹出,然后实时显示后台操作的进度。&#13;  BackgroundWorker对象有三个主要的事件:&#13;  DoWork - 当BackgroundWorker对象的多线程操作被执行时触发。&#13;  RunWokerCompleted - 当BackgroundWoker对象的多线程操作完成时触发。&#13;  ProgressChanged - 当BackgroundWorker对象的多线程操作状态改变时触发。&#13;  另外还有一个非常重要的属性WorkerReportsProgress - 如果想让BackgroundWorker对象以异步的方式报告线程实时进度,必须将该属性的值设为true。&#13;  BackgroundWorker对象的ReportProgress方法用于向主线程返回后台线程执行的实时进度。&#13;  下面是子窗体的代码:&#13;&#13; 1 using S 2 using System.Collections.G 3 using ponentM 4 using System.D 5 using System.D 6 using System.L 7 using System.T 8 using System.Windows.F 9 <span style="color: # namespace ModalProgressDialog<span style="color: # {<span style="color: #
public partial class Form2 : Form<span style="color: #
{<span style="color: #
public int ProgressValue <span style="color: #
{<span style="color: #
get { return this.progressBar1.V }<span style="color: #
set { progressBar1.Value = }<span style="color: #
}<span style="color: # <span style="color: #
public Form2()<span style="color: #
{<span style="color: #
InitializeComponent();<span style="color: #
}<span style="color: #
}<span style="color: # }&#13;  子窗体中放置了一个ProgressBar控件,对外可以通过ProgressValue属性来获取和修改进度条的当前值。同时,我们可以将子窗体的FormBorderStyle属性设为FixedDialog以使其看起来更像对话框,然后将MaximizeBox和MinimizeBox都设为false,将ControlBox属性设为false以隐藏窗体关闭按钮。在父窗体中,我们通过BackgroundWorker对象的RunWorkerAsync方法触发DoWork事件,此时CountTheTime()方法被执行。在CountTheTime()方法中,通过ReportProgress()方法从后台进程(父窗体)传递进度指示到主UI线程(子窗体)中,这样同时会触发ProgressChanged事件,然后我们在该事件中更新子窗体的进度条状态。下面是程序执行时的截图。&#13;&#13;&#13;   注意,使用BackgroundWorker时不能在工作线程中访问UI线程部分,即你不能在BackgroundWorker的事件和方法中操作UI,否则会抛跨线程操作无效的异常。常用的方法是在主窗体的构造函数中添加CheckForIllegalCrossThreadCalls =语句。或者使用Thread类创建一个单独的线程,然后使用Invoke方法。可以参考下面这些内容:&#13;&#13;&#13;
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动}

我要回帖

更多关于 cad窗口消失了 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信