我是多线程的新手.我有一个带有标签和进度条的winform.
我想显示处理结果.首先,我使用Application.DoEvents()方法.但是,我发现表格很冷.
然后我在MSDN上阅读了一些关于多线程的文章.
其次,我使用BackgroundWorker来做到这一点.
this.bwForm.DoWork += (o, arg) => { DoConvert(); };
this.bwForm.RunWorkerAsync();
Run Code Online (Sandbox Code Playgroud)
表格不会冻结,我可以在处理时拖动/ drog.不幸的是,它会抛出InvalidOperationException.所以我必须使用它.Control.CheckForIllegalCrossThreadCalls = false;我确保这不是最终的解决方案.
专家,您有什么建议吗?
编辑: 当我调用listview时抛出InvalidOperationException.此代码位于DoWork()中.
foreach (ListViewItem item in this.listView1.Items)
{
//........some operation
lbFilesCount.Text = string.Format("{0} files", listView1.Items.Count);
progressBar1.Value++;
}
Run Code Online (Sandbox Code Playgroud)
Edit2: 我在DoWork()中使用委托并调用它并不会抛出异常.但形式再次冻结.怎么做才能使表格在处理时可以放置/悬垂?
我想从gridview中选择的行使用复选框.复选框是这样的!
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server"
oncheckedchanged="CheckBox1_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
我想在每一行中获得一列.怎么做.谢谢!