在WinForms桌面应用程序中进行线程化?

时间:2013-01-07 11:20:09

标签: c# winforms multithreading

我有一个绑定到数据网格的数据集。 在数据集中,有一个保存数据状态的库仑。 在页面加载时,它具有“待定”值。

现在,当我与第三方软件交互时,其值会更新“成功”或“失败”。 但是这些变化反映了所有交易完成后的数据网格。

我想按照交易显示所有更新的结果。 使用Thread。

请给我一个代码。

提前致谢

1 个答案:

答案 0 :(得分:2)

您无法从其他线程更新DataSet。如果这样做,应用程序将导致跨线程操作异常。我看到的最好的方法是在后台线程中计算所需的状态,但更新主线程中的DataSet。这不应该影响您的应用程序性能。以下是一些示例代码:

...
            ThreadStart ts = new ThreadStart(UpdateStatuses);
            Thread thread = new Thread(ts);
            thread.Start();
...

        void UpdateStatuses() { 
            // calculate statuses ;
            BeginInvoke(new MethodInvoker(delegate {
                for(int i = 0; i < table.Rows.Count; i++)
                    table.Rows[i]["Status"] = someValue;
            }));
        }