我正在尝试创建一个类来处理我的下载,我遇到的一件事是
在创建窗口句柄之前,无法在控件上调用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表格。
答案 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."));
}
}