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

Contents
[ ]

Чтобы одновременно читать значения ячеек более чем в одном потоке, установитеРабочий лист.Cells.MultiThreadReading кистинный. Если вы этого не сделаете, вы можете получить неправильные значения ячеек.

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

  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();
}