将简单的任务代码段重写为单独的可重用函数

时间:2015-10-07 13:18:48

标签: c# task

每次使用此功能时,我想避免的是重复代码:

waitUntilFilledTask = Task.Run(() => {  
                        while ((myGenericCombobox.Items.Count == 0)) {
                            Threading.Thread.Sleep(100);
                        }     
                     } );

我尝试将其构建为可重用函数的所有选项都无法获得与下面显示的代码相同的结果。为了解释代码的作用:我有几个组合框。当在第一个组合框中选择一个项目时,将自动填充下一个组合框。

我的代码片段的全局目标是:我有一个favorite,其中包含必须在每个组合框中选择的属性...但每个组合框仅在前一个项目中填充内容之前的组合框已经过适当的选择。

(我已经从vb.net翻译了代码,所以如果有一些拼写错误,请原谅...)

Task waitUntilFilledTask = default(Task);

this.cbxGroups.SelectedItem = favorite.GroupName;

// To be reused? (1)
waitUntilFilledTask = Task.Run(() => {  
                        while ((cbxDatasets.Items.Count == 0)) {
                            Threading.Thread.Sleep(100);
                        }     
                     } );
await Task.WhenAll(waitUntilFilledTask );

this.cbxDatasets.SelectedItem = favorite.DatasetName;

// To be reused? (2)
waitUntilFilledTask = Task.Run(() => {  
                        while ((cbxStations.Items.Count == 0)) {
                            Threading.Thread.Sleep(100);
                        }     
                     } );
await Task.WhenAll(waitUntilFilledTask );

this.cbxStations.SelectedItem = favorite.StationName;

// To be reused? (3)
waitUntilFilledTask = Task.Run(() => {  
                        while ((cbxSensors.Items.Count == 0)) {
                            Threading.Thread.Sleep(100);
                        }     
                     } );
await Task.WhenAll(waitUntilFilledTask );

this.cbxSensors.SelectedItem = favorite.SensorName;

0 个答案:

没有答案