当前位置:  开发笔记 > 编程语言 > 正文

是否有"库存"闲置/等待对话框?

如何解决《是否有"库存"闲置/等待对话框?》经验,为你挑选了1个好方法。

我的C#应用​​程序在系统启动时运行,必须等待本地SQL Server实例才能实际执行任何操作.现在,我只是等待服务器响应(我曾经在服务上获得等待句柄,但这不可靠),然后启动应用程序的主对话框.

当然,问题在于,在服务启动之前,用户无法告诉任何事情,而且由于我们使用的硬件可能需要一分钟.所以我想考虑某种"加载/请等待"指标.问题是,我们的项目接近锁定,并且像创建新类一样大的变化会引起很多麻烦 - 修改现有文件(如Program.cs)比创建新文件要少得多.简而言之:在我开始在SQL Server上进行plinking之前,是否有一个非常适合显示(异步,我猜)的.NET类,然后在它开始响应时被删除?



1> Robert Venab..:

这是一个三线程版本,我快速入侵,可以解决这个问题.这可以放在可见形式的任何地方(或者可以针对program.cs进行修改),并生成一个新的,居中的模态对话框,其中包含一个平滑的滚动进度条,它将主导用户注意,直到父线程中的FinishedProcessing被设置为止为真.

        //Update to true when finished loading or processing
        bool FinishedProcessing = false;  

        System.Threading.AutoResetEvent DialogLoadedFlag
            = new System.Threading.AutoResetEvent(false);  


        (new System.Threading.Thread(()=> {

            Form StockWaitForm = new Form()
            { Name = "StockWaitForm", Text = "Please Wait...", ControlBox = false,
                FormBorderStyle = FormBorderStyle.FixedDialog, StartPosition = FormStartPosition.CenterParent,
                Width = 240, Height = 80, Enabled = true };

            ProgressBar ScrollingBar = new ProgressBar() 
            { Style = ProgressBarStyle.Marquee, Parent = StockWaitForm,
            Dock = DockStyle.Fill, Enabled = true };  

            StockWaitForm.Load += new EventHandler((x, y) =>
            {
                DialogLoadedFlag.Set();
                (new System.Threading.Thread(()=> {
                    while (FinishedProcessing == false) Application.DoEvents();
                    StockWaitForm.Invoke((MethodInvoker)(()=> StockWaitForm.Close()));
                })).Start();

            });  

            this.Invoke((MethodInvoker)(()=>StockWaitForm.ShowDialog(this)));  


        })).Start();  

        while (DialogLoadedFlag.WaitOne(100,true) == false)  Application.DoEvents();     
        //
        //Example Usage
        //Faux Work - Have your local SQL server instance load here
        for (int x = 0; x < 1000000; x++) int y = x + 2;  

        FinishedProcessing = true;

定制品味.此外,如果您在生产应用程序中使用它,请将try ... catch块中的新线程内容包装到CYA.最后一件事,我将根据"Coderer Public License/SO v1.1"向您发布此代码,如下所示:

Coderer公共许可证/ SO v1.0
I,社区"Stack Overflow"上称为"Coderer"的人,同意彻底考虑切换到一种理智的项目管理方法,允许在执行阶段将额外的类添加到项目中.据我所知,类似纳粹的变更控制对所有相关方都是不健康的.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有