尝试从另一个类更新UI时出错

时间:2016-11-18 03:14:51

标签: c# asynchronous backgroundworker

我正在尝试创建一个类来处理我的下载,我遇到的一件事是

  

在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke

我正在尝试运行的代码是

    public bool TransferProgress(TransferProgress progress)
    {
        if (!mainform.IsHandleCreated)
        {
            mainform.CreateControl();
        }
        mainform.amountdl.Invoke((MethodInvoker)(() => mainform.amountdl.Text = "Downloaded " + progress.ReceivedObjects + "/" + progress.TotalObjects));
        if (progress.TotalObjects == progress.ReceivedObjects)
        {
            mainform.amountdl.Invoke((MethodInvoker)(() => mainform.amountdl.Text = "Configuring Files Please Wait."));               
        }
        return true;
    }

顶部我认为我正在创建一个窗口句柄,但C#不同意我的看法。最后,但并非最不重要。

DoxramosManager mainform = new DoxramosManager();

在我班上名列前茅。我的班级不是Winforms表格。

1 个答案:

答案 0 :(得分:0)

在调用invoke之前,您需要确保已加载表单。尝试使用Loaded事件。

编辑:这样的事情可能是:

if (!mainform.IsHandleCreated)
        {
            mainform.CreateControl();

            mainform.Loaded += (s, ea) =>
            {
                mainform.amountdl.Invoke((MethodInvoker)(() => mainform.amountdl.Text = "Downloaded " + progress.ReceivedObjects + "/" + progress.TotalObjects));
                if (progress.TotalObjects == progress.ReceivedObjects)
                {
                    mainform.amountdl.Invoke((MethodInvoker)(() => mainform.amountdl.Text = "Configuring Files Please Wait."));
                }
            };
        }
        else
        {
            mainform.amountdl.Invoke((MethodInvoker)(() => mainform.amountdl.Text = "Downloaded " + progress.ReceivedObjects + "/" + progress.TotalObjects));
            if (progress.TotalObjects == progress.ReceivedObjects)
            {
                mainform.amountdl.Invoke((MethodInvoker)(() => mainform.amountdl.Text = "Configuring Files Please Wait."));
            }
        }