我要实现的功能是:
我的应用程序显示一对框form,form里有一picturebox控件,在初始化时已经绘制了bmp图片,同时我在显示form.showdialog的同时又创建了一新的线程,具体是 delegate定义已委托之后 用Begininvoke实现,现在我希望在新的线程里去操作主线程form的picturebox控件,不知道该如何将控件传递到新建的线程里,并可以安全的操作。
谢谢。
我的应用程序显示一对框form,form里有一picturebox控件,在初始化时已经绘制了bmp图片,同时我在显示form.showdialog的同时又创建了一新的线程,具体是 delegate定义已委托之后 用Begininvoke实现,现在我希望在新的线程里去操作主线程form的picturebox控件,不知道该如何将控件传递到新建的线程里,并可以安全的操作。
谢谢。
解决方案 »
- 在DetailView中使用DropDownList进行插入,但插入后该字段还是空白
- 關於一個控件的問題
- c#winform中,两个combox绑定到同一个数据源
- 关于日期的问题
- ASP.NET2.0 C# 如何在不使用母板也的情况下设置网页的keywords 和description
- 如何控制TextBox不能输入中文
- [讨论]:欢迎各路神仙进入,发表自己的观点!!!
- 在winform里面,能不能用控件画线?用什么控件画?
- 关于SqlDataReader中GetBytes方法的几个很菜的问题,大家进来看看啊(得分多多)
- C#和C/C++
- ★★★为什么绝大多数系统的用户名和密码不支持中文?★★★
- 怎么让两个自定义控件,上面放图片,两控件叠加,让上面的控件的背景色透明不影响下面的图片显示?
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
但说到安全,还是按微软推荐的方式去做。
{
InitializeComponent();
changeTextDelegate = new ChangeTextDelegate(changeText);
} private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(f));
t.Start();
} delegate void ChangeTextDelegate(); ChangeTextDelegate changeTextDelegate; void changeText()
{
textBox1.Text = "Hello";
} void f()
{
Invoke(changeTextDelegate);
}随便写了段代码
先谢谢你,
再问一下,
我要显示的数据是在我创建的线程里产生的而且是循环产生,我希望就是每一个循环产生一个数据然后实时的通过主线程的控件显示出来,也就是说我一开始就显示一个form,在显示form的同时就创建一个新的线程,这个线程里去循环产生(获取)数据,然后每一个循环产生的数据实时的显示到我一开始的form里的一个控件里,当我的循环结束后能自动通知到form主线程,并终止新建的获取数据线程。
我的上述功能该如何实现呢?
1.如果使用Control.Invoke或Control.BeginInvoke这里讲了很多,
通过多线程为基于 .NET 的应用程序实现响应迅速的用户
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx
为Windows应用创建简单的异步调用模式
http://www.microsoft.com/china/MSDN/library/architecture/AsynCallPattern.mspx如果需要独立线程处理任务,而且还要跟踪任务进度同UI交互,这里两篇文章可以参考一下,
使用BackgroundWorker组件进行异步操作编程
http://blog.csdn.net/zhzuo/archive/2008/07/23/2699305.aspx
实现增强的异步任务执行组件
http://blog.csdn.net/zhzuo/archive/2008/07/23/2699847.aspx
摘要:本文介绍如何在.NET中实现基于事件的异步模式组件。
asyncOperation = AsyncOperationManager.CreateOperation(null);
asyncOperation.Post()....可以避免枯燥的Dance of Invoke!
public void MapMaxToMin()
{
Form1 frm = new Form1();
action invoke = delegate()
{
frm.Text = "123";
};
Variables.frm.Invoke(invoke);
}
这是比较简单弱智的一种方法……