Чтение значений ячеек в нескольких потоках одновременно

Contents
[ ]

Для чтения значений ячеек в более чем одном потоке одновременно установите Worksheet.Cells.MultiThreadReading в true. В противном случае вы можете получить неправильные значения ячеек.

Следующий код:

  1. Создает рабочую книгу.
  2. Добавляет лист.
  3. Заполняет лист строковыми значениями.
  4. Затем создает два потока, которые одновременно читают значения из случайных ячеек. Если прочитанные значения правильные, ничего не происходит. Если прочитанные значения неправильные, то отображается сообщение.

Если вы закомментируете эту строку:

 testWorkbook.Worksheets[0].Cells.MultiThreadReading = true;

тогда отображается следующее сообщение:

 if (s != "R" + row + "C" + col)

{

    MessageBox.Show("This message box will show up when cells read values are incorrect.");

}

В противном случае программа работает без отображения любого сообщения, что означает, что все значения, считываемые из ячеек, являются правильными.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
public static void Main()
{
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
public static Workbook testWorkbook;
public static void ThreadLoop()
{
Random random = new Random();
while (Thread.CurrentThread.IsAlive)
{
try
{
int row = random.Next(0, 10000);
int col = random.Next(0, 100);
string s = testWorkbook.Worksheets[0].Cells[row, col].StringValue;
if (s != "R" + row + "C" + col)
{
Console.WriteLine("This message will show up when cells read values are incorrect.");
}
}
catch { }
}
}
public static void TestMultiThreadingRead()
{
testWorkbook = new Workbook();
testWorkbook.Worksheets.Clear();
testWorkbook.Worksheets.Add("Sheet1");
for (var row = 0; row < 10000; row++)
for (var col = 0; col < 100; col++)
testWorkbook.Worksheets[0].Cells[row, col].Value = "R" + row + "C" + col;
// Commenting this line will show a pop-up message
// testWorkbook.Worksheets[0].Cells.MultiThreadReading = true;
Thread myThread1;
myThread1 = new Thread(new ThreadStart(ThreadLoop));
myThread1.Start();
Thread myThread2;
myThread2 = new Thread(new ThreadStart(ThreadLoop));
myThread2.Start();
System.Threading.Thread.Sleep(5 * 1000);
myThread1.Abort();
myThread2.Abort();
}