我在窗口上放置了一个自定义控件,这个控件中有个定时器,定时器负责控件的刷新. 但当整个窗口堵塞时(远程调用时),自定义控件就不刷新了. 我想释放可以让自定义的控件拥有一个自己独立的线程,负责刷新自己的控件.
我看大多数的做法是让界面线程独立出来,invoke一个线程,负责远程调用.但我发现那样修改量太大了.并且只有一个控件需要在堵塞时刷新,所以考虑让一个独立的线程刷新该控件. 但是没有一点思路.
请大家帮忙!
我看大多数的做法是让界面线程独立出来,invoke一个线程,负责远程调用.但我发现那样修改量太大了.并且只有一个控件需要在堵塞时刷新,所以考虑让一个独立的线程刷新该控件. 但是没有一点思路.
请大家帮忙!
解决方案 »
- datagridview单元格计算
- msdn中关于接口的一点小问题
- C#制作播放器,怎么同步显示歌词呢?有谁会的啊
- C# 委托与事件, 急需大家的帮助,就20分了,对不起大家了
- backgroundworker控件等待执行完毕问题(没有耐心的人千万别看)
- C#控制打印机走纸
- 第一次使用dataadapter.update,想偷个懒怎么那么难?
- 请教:c#中处理oracle存储过程返回自定义型的
- ▲▲My God——我又发现DataSet的一个BUG,快来灭虫!▲▲
- 我买了一套d版的visulstudio7.0/六张盘,结果安装过程中提示放第一张盘,放入结果
- 关于图片锯齿的小问题
- 试着用电驴共享了一本电子书《C# 2008数据库入门经典(第4版)》大家测试一下是否可用
所以我想让一个独立的线程负责这个控件的界面.而不是用整个窗口界面线程.不知道微软是否把这条路堵死了.
采用backgroundworker 这个控件 来执行 你的方法。
绝对满足
正确的做法是应该是让你的远程调用放到线程里去做,或者说让你的远程调用变成异步的.
不知道有没有接触过WCF,WCF Call基本都是:异步的方法+完成时的回调事件.如果你无法将方法变成异步,那么考虑这样处理以下情况假设在Form中放置一个按钮,处理click事件,Click事件将会做一次远程调用(放入线程池),调用结束会提示"Method call completed"; private void button1_Click(object sender, EventArgs e)
{
Action completedAction = () =>
{
this.Invoke(new Action(() => { this.Text = "Method call completed"; }));
};
ThreadPool.QueueUserWorkItem
(status =>
{
//do remote call
System.Threading.Thread.Sleep(5000);
Action act = status as Action;
if (act != null)
{
act.Invoke();
}
}, completedAction);
}
本人比较愚钝,我查了查backgroundworker的用法,还是负责远程调用.不直接负责控件的刷新. 望请教具体的做法.
你说的方法我考虑过,但是这种方式代码修正的太多,所以不想改.^_^