关于C#线程的问题 窗体上有个按钮,有一个进度条,我在点击按钮之后,开启了一个线程,线程里的方法是在logic层里,是对图片进行处理,比如说有20张图片,我开启线程之后,每次处理一张图片,处理完之后更新这张图片在数据库的状态。在窗体中有一个TIMER,每3秒取一下数据库,发现有几张图片的状态改变了,进度条的VALUE变成几。这个怎么实现? 是用委托么?我正常的情况下,线程开启了,TIMER就不走,什么时候线程走完了他才走。各位高手指教一下,刚学习C# 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 除去主线程,每个子线程对应处理一张图片。这需要在主线程与子线程之间进行同步,并由子线程来更新主线程的UI。BeginInvoke()、EndInvoke()这几个函数是比较重要的。你可以先找找MSDN上关于线程同步和UI线程同步的内容。我以前也翻译过一篇MSDN Magazine上的文章,其中提到的同步方法,我至今仍在使用。链接如下:http://www.vckbase.com/document/viewdoc/?id=1126http://blog.vckbase.com/abbey/articles/213.html 给logic定义一个委托事件,然后Form调用logic中的方法并实现logic中的委托,logic的委托的实现代码就是控制界面的进度效果。。 为什么我一开启线程,我的TIMER就不走了呢??? new Thread((ThreadStart)delegate{ // you code Control.Invoke((MethodInvoker)delegate { })}).Start(); #region -定义一个输出委托 /// <summary> /// 定义一个输出委托 /// </summary> /// <param name="strOutInfo"></param> public delegate void DebugOutMenuEvent(string strOutInfo); #endregion#region -定义一个输出委托 /// <summary> /// 定义一个输出委托 /// </summary> public event DebugOutMenuEvent DebugOutHandler; #endregionpublic void Login() { if (this.loggedin) { this.Close(); } // 调用委托UI输出 if (this.DebugOutHandler != null) { this.DebugOutHandler("Opening connection to " + this.server); } }在UI部分挂接这个委托,并编写实现代码,就像为按钮的click编写事件一样的。 URL重写怎么配置 vs2008 Add=> new Item=> SqlServer Database 的mdf文件问题 怎么更新不了数据库 还是问.net 2.0下treeview怎么才能不刷新问题 使用飞信的VMDONTNET为什么一用到datatable就出错呢? 在C#中怎样判断一个程序已经在运行了? .Net 2005串口控件多层窗体访问的简单问题 C#与存储过程返回值的未将对象引用设置到对象的实例,求帮忙 请教水晶报表的问题 请问怎样往listview的columnHeader里填入内容? c#怎么实现图片翻转90度??? DataGridView 问题求帮助!
http://www.vckbase.com/document/viewdoc/?id=1126
http://blog.vckbase.com/abbey/articles/213.html
logic的委托的实现代码就是控制界面的进度效果。。
{
// you code
Control.Invoke((MethodInvoker)delegate
{
})
}).Start();
#region -定义一个输出委托 /// <summary>
/// 定义一个输出委托
/// </summary>
/// <param name="strOutInfo"></param>
public delegate void DebugOutMenuEvent(string strOutInfo); #endregion#region -定义一个输出委托 /// <summary>
/// 定义一个输出委托
/// </summary>
public event DebugOutMenuEvent DebugOutHandler; #endregionpublic void Login()
{
if (this.loggedin)
{
this.Close();
}
// 调用委托UI输出
if (this.DebugOutHandler != null)
{
this.DebugOutHandler("Opening connection to " + this.server);
}
}在UI部分挂接这个委托,并编写实现代码,就像为按钮的click编写事件一样的。