0

我在 Visual Studio 的主窗体中遇到内存不足的问题,我不知道为什么,我需要在我的程序初始化时放置一个进度条,它适用于我的程序的其他形式,但不是主要形式,它给我一个内存不足的错误

这是主要的表单代码:

    public MainForm()
    {
        checkinstance();

        ProgressDialog progressDialog = new ProgressDialog();

        Thread backgroundThread = new Thread(
            new ThreadStart(() =>
            {
                progressDialog.SetIndeterminate(true);                  
                InitializeComponent();
                progressDialog.BeginInvoke(new Action(() => progressDialog.Close()));
            }
        ));

        backgroundThread.Start();
        progressDialog.ShowDialog();
    }

ProgressDialog 是一个带有进度条的表单,

谢谢。

4

2 回答 2

1

我假设你的 UI 控件的初始化需要很多时间。这就是为什么您要放入InitializeComponent后台线程的原因。

但是,这将失败:
InitializeComponent 创建您的 UI 对象的实例。UI 对象只允许从 UI 线程调用。这通常是他们创建的线程。
结果是,在后台线程之外访问 UI 对象的每个代码都会导致异常。

您需要在这里采取完全不同的方法。在启动主窗体并将该代码放入后台线程时,您需要确定究竟需要这么长时间。

于 2013-02-06T10:54:41.333 回答
0

谢谢大家,我最终在处理程序中使用了 BackGroundWorker 和 ProgressBar,对于那些可能遇到同样问题的人来说,这些都是很棒的文章

http://mycodelog.com/2010/02/11/busy/

[http://www.dotnetperls.com/progressbar]

http://theraneman.blogspot.com.br/2011/02/did-you-wish-backgroundworker-had.html(特别是这里)

于 2013-02-06T13:18:43.183 回答