Одновременное чтение значений Cell в нескольких потоках
Contents
[
Hide
]
Необходимость одновременного чтения значений ячеек в нескольких потоках является распространенным требованием. В этой статье объясняется, как использовать для этой цели номер Aspose.Cells.
Чтобы одновременно читать значения ячеек более чем в одном потоке, установитеРабочий лист.Cells.MultiThreadReading кистинный. Если вы этого не сделаете, вы можете получить неправильные значения ячеек.
Следующий код:
- Создает рабочую книгу.
- Добавляет рабочий лист.
- Заполняет рабочий лист строковыми значениями.
- Затем он создает два потока, которые одновременно считывают значения из случайных ячеек. Если считанные значения верны, ничего не происходит. Если считанные значения неверны, отображается сообщение.
Если вы прокомментируете эту строку:
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.");
}
В противном случае программа запускается без отображения каких-либо сообщений, что означает, что все значения, считанные из ячеек, верны.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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(); | |
} |