这个要用多线程或线程池来做,下面是用线程池的一个例子
ThreadPoolQueueUserWorkItem(new WaitCallback(obj1 =>
{
for (int i = 0; i < 100; i++)
{
//这里加载你的数据
PValue++;//这个变量是用来给进度条的进度赋值的属性,每加载一条你就加1
}
})
);
private static int pValue;
public int PValue
{
get { return pValue; }
set
{
pValue = value;
}
}
//frmA: 源窗体
//------------------------------------------
//引用
using SystemThreading;
public frmA()
{
InitializeComponent();
worker = new BackgroundWorker();
workerDoWork += new DoWorkEventHandler(worker_DoWork);
workerRunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
}
/// <summary>
/// 异步 开始事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
//需要执行的代码
}
/// <summary>
/// 事件: 异步执行完成后
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBoxShow("执行完成。", "run", MessageBoxButtonsOK, MessageBoxIconInformation);
}
//点击一个按钮后开始执行
private void btnA_Click(object sender, EventArgs e)
{
//代码
//异步执行开始
workerRunWorkerAsync(tableName);
//显示进度窗体
frmB frm = new frmB(thisworker);
frmStartPosition = FormStartPositionCenterScreen;
frmShowDialog(this);
}
frmB:
//里面放了一个loadinggif显示进度
------------------------------------------------------------
using System;
using SystemComponentModel;
using SystemWindowsForms;
namespace test
{
public partial class frmB: Form
{
public frmB(BackgroundWorker worker)
{
InitializeComponent();
workerProgressChanged +=new ProgressChangedEventHandler(worker_ProgressChanged);
workerRunWorkerCompleted +=new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
thisClose();
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//lblStatusText = "";
}
//工作完成后执行的事件
public void OnProcessCompleted(object sender, EventArgs e)
{
thisClose();
}
}
另外,站长团上有产品团购,便宜有保证
注册全局热键要用到Windows的API方法RegisterHotKey和UnregisterHotKey。一、声明注册热键方法[DllImport("user32dll")]private static extern int RegisterHotKey(IntPtr hwnd, int id, int fsModifiers, int vk);[DllImport("user32dll")]private static extern int UnregisterHotKey(IntPtr hwnd, int id);int Space = 32; //热键ID private const int WM_HOTKEY = 0x312; //窗口消息-热键 private const int WM_CREATE = 0x1; //窗口消息-创建 private const int WM_DESTROY = 0x2; //窗口消息-销毁 private const int MOD_ALT = 0x1; //ALT private const int MOD_CONTROL = 0x2; //CTRL private const int MOD_SHIFT = 0x4; //SHIFT private const int VK_SPACE = 0x20; //SPACE 二、注册热键方法/// <summary> /// 注册热键 /// </summary> /// <param name="hwnd">窗口句柄</param> /// <param name="hotKey_id">热键ID</param> /// <param name="fsModifiers">组合键</param> /// <param name="vk">热键</param> private void RegKey(IntPtr hwnd, int hotKey_id, int fsModifiers, int vk)elseif (!result)}/// <summary> /// 注销热键 /// </summary> /// <param name="hwnd">窗口句柄</param> /// <param name="hotKey_id">热键ID</param> private void UnRegKey(IntPtr hwnd, int hotKey_id)三、重写WndProc方法,实现注册protected override void WndProc(ref Message m)break;case WM_CREATE: //窗口消息-创建 RegKey(Handle,Space,MOD_ALT | MOD_CONTROL | MOD_SHIFT,VK_SPACE); //注册热键 break;case WM_DESTROY: //窗口消息-销毁 UnRegKey(Handle,Space); //销毁热键 break;default:break;}}
private void button1_Click(object sender, EventArgs e)
{
try
{
if (thistxtUrlTextTrim()Length == 0)
{
("请输入主入口地址!");
}
else
{
//这里获取GetWebContent方法的结果
string webContent = GetWebContent(thistxtUrlTextTrim());
//声明一个WebBrowser
WebBrowser webBrowser = new WebBrowser();
webBrowserNavigate("about:blank");
//将GetWebContent方法返回的结果转化为HtmlDocument,就可以正确处理网页中的元素了。
HtmlDocument htmlDoc = webBrowserDocumentOpenNew(true);
htmlDocWrite(webContent);
//获取网页中Body中的Html代码
string outerHtml = htmlDocBodyOuterHtml;
//获取网页的标题
string outerTitle=htmlDocTitle;
thistxtDocumentTitleText = outerTitle;
thistxtDocumentConentText = outerHtml;
}
}
catch (Exception ex)
{
MessageBoxShow(exMessage);
}
}
Programcs 一般不写代码,没特殊需要不写(本人还没碰到过要在program中写代码的)program只是个程序入口,完全有编译器生成,楼主可以不管
From是主要代码所在地。From分成三块,一块是界面编辑,一块是界面编辑代码,界面编辑代码一般也有编译器生成,在你进行界面 *** 作的时候编译器会自动生成,在这里你也不要写代码,当然有特殊需要也是可以的。第三块就是formcs,这里是你主要代码的地方,你添加的事件什么的都要写在这里。一般的话你双击form就会进去formcs,同时会生成一个load事件,在这个事件里你可以进行一些初始化要做得事,其他就不一一说了,楼主自己体会啊。
在c#form1就是一个类,要用form就要new一个实例。当然在progrm中就有,在main中new了,这个你看下程序就知道了。
另外有一个功能的实现你要添加一个类,在这个类中尼也要写不少代码的,楼主开始做后一定会有体会的
这个获取方式有很多,建议您可以试试这样class Program
{
static void Main(string[] args)
{
try
{
new MethodNoTest()Run();
}
catch(Exception exp)
{
ConsoleWriteLine("外部出错:" + exp);
}
try
{
new MethodNoTest()aa();
}
catch(Exception exp)
{
ConsoleWriteLine("外部出错2:" + exp);
}
}
}
你将program中的启动项目改成你要启动项目,然后在解决方案配置的下拉框中选择Release(在一个绿色的箭头的旁边),然后点击绿色箭头(运行按钮),等程序运行成功后就可以在bin/Release 中找到你要的可执行文件,运行后可能会出现提示信息,不用理他,只要点确定就可以了。
在bin/Debug中的文件是你编译的可执行文件,运行效果都是一样的,不过在debug中有很多调试文件
以上就是关于C#winform不知道文件大小(文件很大3G以上)和所用时间,如何做一个同步进度条求源码,谢谢了!全部的内容,包括:C#winform不知道文件大小(文件很大3G以上)和所用时间,如何做一个同步进度条求源码,谢谢了!、求winform 加载窗体时d出另一个窗体并显示进度条的源码、求WINFORM 虚拟键盘源码。。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)