窗体控件显示问题

wujun_lyx 2010-06-04 10:20:18
客户端方法:
private void button6_Click(object sender, EventArgs e)
{
Top滚动 frm = new Top滚动();// Top滚动是Form,已经在属性框中设置TopMost=true
frm.Show(); // 窗体没有任何代码,只有一label写着:数据正处理,请等待...

Service.Service ser = new Service.Service();
ser.HelloWorld();// webservice 方法 请见下

}


[WebMethod]
public string HelloWorld()
{
Thread.Sleep(3000);


return "Hello World";
}

问题:在ser.HelloWorld()方法没完成之前,frm能打开,但窗体里面的label无法显示.......
是什么原因?请各位大侠指点下
...全文
163 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wujun_lyx 2010-06-04
  • 打赏
  • 举报
回复
to computerfox:
还有其他方法吗?
我无法用单独的线程执行它,因为实际的代码涉及很多变量和方法,ser.HelloWorld()只是我写的一个简单的代替方法.
shuzhan87 2010-06-04
  • 打赏
  • 举报
回复
线程运行时冲突 注意同步
捷哥1999 2010-06-04
  • 打赏
  • 举报
回复
Service.Service ser = new Service.Service();
会导致线程阻塞,你用单独的线程执行它,就不会导致主线程阻塞:
ser.HelloWorld();//   webservice   方法   请见下 

修改为


Thread thread = new Thread(new ThreadStart(HelloWorld));
thread.Start();


还要修改HelloWorld返回void
fangli8023 2010-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 computerfox 的回复:]

Service.Service ser = new Service.Service();
会导致线程阻塞,你用单独的线程执行它,就不会导致主线程阻塞:
C# code
ser.HelloWorld();// webservice 方法 请见下

修改为

C# code

Thread thread = new Thread(……
[/Quote]

掺和一下,正解。
zzx509 2010-06-04
  • 打赏
  • 举报
回复
只能用线程来解决界面假死的问题。你的CallHelloWorld要整理放入单独的方法中。
	Top滚动 frm; 
void CallHelloWorld()
{
//开始工作
//...
//完成工作
this.BeginInvoke((EventHandler)delegate {
if (frm != null && frm.IsDisposed)
{
frm.Close();
}
});
}
private void button1_Click(object sender, EventArgs e)
{
this.BeginInvoke((EventHandler)delegate
{
frm = new Top滚动();
frm.ShowDialog();
});
Thread th = new Thread(new ThreadStart(CallHelloWorld));
th.Start();
}
wujun_lyx 2010-06-04
  • 打赏
  • 举报
回复
to zzx509:
private void button1_Click(object sender, EventArgs e)
{
frm = new Top滚动();
frm.Show();
this.BeginInvoke(new MethodInvoker(CallHelloWorld));
}
CallHelloWorld 只是我为了说明问题而简单写的方法,实际上 CallHelloWorld 并不只一个函数,而且涉及很多东西,放不进线程,执行时间长,界面假死。所以才想显示一个小窗体让人知道正在处理数据。
  • 打赏
  • 举报
回复
主线程负责打开窗口,子线程去请求webservice
zzx509 2010-06-04
  • 打赏
  • 举报
回复
试下用异步委托

Top滚动 frm;
void CallHelloWorld()
{
Service.Service ser = new Service.Service();
ser.HelloWorld();// webservice 方法
frm.Close(); //调用结束,关闭窗体
}
private void button1_Click(object sender, EventArgs e)
{
frm = new Top滚动();
frm.Show();
this.BeginInvoke(new MethodInvoker(CallHelloWorld));
}
项目名称:[精仿]360安全卫士-10.30更新(CSkin Demo) 界面库版本号:10.30 最新版本 下载内容: 精仿360安全卫士源码一份, 可引用至工具箱最新版CSkin.dll一份 实现功能: 1.发光标题。 2.直角边框和阴影。 3.360安全卫士主界面模仿。 4.多系统支持,不需要win8系统,即可实现win8风格的360。 5.自定义控件的美化使用。 界面库更新文档: CC2013-10.30 1.由于SkinForm名字太多人使用,界面库命名正式改为CSkin.dll,官网www.cskin.net。 2.SkinTabControl标签中添加菜单箭头,可点击展开菜单。 3.SkinTabControl添加标签关闭按钮。 4.修复部分中文乱码问题。 5.优化好友列表右键菜单。 6.将窗体自定义系统按钮改为集合模式,可添加无数个自定义系统按钮。自定义系统按钮事件中可以 e.参数 来判断。 7.增加360安全卫士-DEMO案例。 8.增加SkinAnimatorImg控件,用于支持位图动画的播放。如360的动态logo。 9.各种细节BUG优化。 CC2013-10.11 1.添加SkinTabControlEx,加入更加自定义的美化属性和动画效果。 2.添加SkinAnimator,通用动画控件。 3.添加Html编辑器控件 4.修复SkinButton图标和文本相对位置的BUG CC2013-9.26 1.优化好友列表CPU占用 2.好友列表加入好友登录平台属性:安卓 苹果 WEBQQ PC 3.优化标题绘制模式,新添标题绘制模式属性。 4.新添标题偏移度属性。 5.加入圆形进度条控件:ProgressIndicator。 CC2013-9.5.2 1.优化截图控件,截图工具栏加入新功能。 2.解决个人信息卡和天气窗体显示后不会消失的问题。 3.各种细节BUG优化。 CC2013-9.5.1 1.解决贴边左右隐藏的BUG。 2.解决窗体点击事件不能触发的问题。 3.优化SkinButton继承父容器背景色的代码。 4.解决SkinButton异常错误。 CC2013-9.3 1.好友列表右键菜单没反应问题。 2.新增美化控件SkinDatagridview。 3.密码软件盘回删不了文字问题。 4.双击窗体最大化,最大化后再双击恢复原大小,(win7)。 5.部分细节调优。 小编:下载不要分,DEMO教你如何熟练使用CSkin界面库美化自己的窗体。 友情链接: http://bbs.csdn.net/topics/390510544 (精仿QQ2013局域通讯) http://download.csdn.net/detail/lyx_520/5710799 (C#实现Win8窗体)
version :4.0 1、将生成的代码和事件用两个文件实现。 2、修改了部分Bug; 3、颜色设置做了部分改进; 4、内部集成了VC的编译器,和模拟器,生成C文件后可以直接在uCGUIBuilder中编译,运行模拟器了 5、添加代码自动完成功能; 6、添加画线功能。 version : 3.1.0.0 1、修改了选择不同窗体属性窗口不更新的BUG; 2、修改了只能打开一个ucGUIBuilder的功能,现在可以同时启动多个; 3、修复了拖放非ucfrm引起软件错误的Bug; 4、添加了控件ID自动增加功能; 5、添加了控件ID检查功能,控件ID有重复时会有警告; 6、添加了用户自定义字体功能; 7、支持中英文切换(但功能不够完善); 8、支持自动检查更新; 9、修改了不能保存用户自定义ID的BUG; version : 3.0.0.0 重写了部分内核,运行更稳定; 支持窗体设计器的复制、粘贴、剪切、删除、撤销、等基本操作; 支持多控件,对齐、公共属性修改等基本操作; 支持将.ucfrm文件与ucGUIBuilder关联功能; 支持控件自定义ID; 添加了窗体预览功能; 添加了对控件事件的支持; 添加了在线检查更新功能; 等…… version : 2.1.0.5 优化了控件库; 修复了一些Bug; 代码生成窗口中添加了C语言语法高亮显示功能; C文件模板做了部分修改(C文件模板大家可以随意修改为自己喜欢的格式(..\Template\Template.c文件) 但是要保证$$$GUI_WIDGET_CREATE_INFO$$$ $$$Defination$$$ $$$InitDialog$$$ 三个字符串位置不变) 支持设计的窗体保存为文件,并可以打开; 对所有控件属性添加了Description(在属性窗口最下面显示); 窗体布局可以保存,可以自定义为自己喜欢的窗体布局; 修改了部分功能; version : 2.0.0.5 优化了控件库; 修复了一些Bug; 可以生成完整的C文件(包括 资源表,初始化代码等); 修改了部分功能; version : 1.0.0.0 功能很不完善; 还有好多BUG; 目前只能生成资源表; 暂时不能生成其他代码; 大家有什么好的建议可以发送Email 到: ucguibuilder@163.com

111,120

社区成员

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

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

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