我在TableLayoutPanel
中动态创建了一堆文本框,标签和进度条
这些我想从Parallel.Foreach
线程控制。
我知道每个控件的名称,所以我可以这样访问它们:
Table1.Invoke(
new MethodInvoker(delegate() {
Table1.Controls[<name>].Text = "text to write";
}));
但是当我尝试更改进度条的值或者我尝试更改样式(blocks-&gt; marquee)时,它不知道.Style选项的.Value。
Table1.Invoke(
new MethodInvoker(delegate() {
Table1.Controls[<progressbar_name>].Value = <percentage>;
}));
Table1.Invoke(
new MethodInvoker(delegate() {
Table1.Controls[<progressbar_name>].Style = ProgressBarStyle.Marquee;
}));
它给出了一个错误,即.Value和.Style不能存在于当前上下文中。
答案 0 :(得分:0)
您可能希望将Table1.Controls[<progressbar_name>]
投射到ProgressBar
类。
答案 1 :(得分:0)
您需要转换控件才能使用ProgressBar属性。
试试这个:
public async Task<IEnumerable<DiagnosticsInfo>> Get()
{
var task1 = GetDiagnosticsInfo1();
var task2 = GetDiagnosticsInfo2();
var task3 = GetDiagnosticsInfo3();
return await Task.WhenAll(task1, task2, task3);
}
很高兴为您服务!
答案 2 :(得分:0)
当您引用Table1.Controls[<progressbar_name>]
时,这被解释为Control
,而不是ProgressBar
,Control
var progBar = Table1.Controls[<progressbar_name>] as ProgressBar;
if(progBar != null)
{
progBar.Value = = <percentage>;
}
。
一个简单的解决方法:
char str[5] = "ankit";
严格来说,if结构不一定是必要的,但在某些情况下可能会跳过尝试设置值而避免异常(例如,如果表中的控件未正确加载或实例化)。