Cha*_*kay 13 c# multithreading winforms
我正在练习线程并遇到了这个问题.情况是这样的:
我在一个表单上有4个进度条,一个用于下载文件,一个用于显示页面加载状态等...
我必须从一个单独的线程控制每个ProgressBar的进度.
问题是,我得到一个出现InvalidOperationException它说
跨线程操作无效:控制'progressBar1'从其创建的线程以外的线程访问.
我在这种方法上错了,还是有人能告诉我如何实现这个?
ebb*_*ebb 43
Control只能在创建它的线程(UI线程)中访问A.
你必须做类似的事情:
Invoke(new Action(() =>
{
progressBar1.Value = newValue;
}));
Run Code Online (Sandbox Code Playgroud)
然后,invoke方法在UI线程上执行给定的委托.
Pet*_*lly 13
您可以检查Control.InvokeRequired标志,然后根据需要使用Control.Invoke方法.Control.Invoke接受委托,因此您可以使用内置的Action <T>.
public void UpdateProgress(int percentComplete)
{
if (!InvokeRequired)
{
ProgressBar.Value = percentComplete;
}
else
{
Invoke(new Action<int>(UpdateProgress), percentComplete);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
private void Form1_Load(object sender, EventArgs e)
{
CheckForIllegalCrossThreadCalls = false;
}
Run Code Online (Sandbox Code Playgroud)
也许这会奏效.
| 归档时间: |
|
| 查看次数: |
45185 次 |
| 最近记录: |