C#winform不知道文件大小(文件很大3G以上)和所用时间,如何做一个同步进度条求源码,谢谢了!

C#winform不知道文件大小(文件很大3G以上)和所用时间,如何做一个同步进度条求源码,谢谢了!,第1张

这个要用多线程或线程池来做,下面是用线程池的一个例子

                           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 虚拟键盘源码。。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10091448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存