Screenshot of VisualCalc Release Preview
喋る電卓ソフトVisual Calc.初めて大きなプログラムを書きました. .Net Framework 4.5, C# 5, WPFを用いたもので,Windows Vista以降で動作します.
機能
喋る機能
数字を読み上げてくれるのがこの電卓の特徴です. ボタンを押すたびに喋ってくれます.(三角関数とかは…無い)
マスコット機能
電卓の横で応援してくれます. Release Preview以降は削除されていました. これいる?
Mascot feature
税金の計算
税金の計算もできます.初期設定が5%なので,時代を感じます.(2021年現在10%)
Tax is 5%
途中で8%になってる.
Tax is 8%
21億桁計算機能
String型の最大文字数が21億(32ビット符号付きの最大値)なので,21億桁計算できます.(やったことはない.)
100! on Visual Calc Release v1.01
グラフ
申し訳程度の機能.今ならWindows標準の電卓にあります.これいる?
Graph on Visual Calc Release v1.01
謎機能
これいる?
Tools on Visual Calc Release v1.01
小話(初めてのマルチスレッド)
そして,21億桁計算機能はめちゃくちゃ時間がかかる場合があったので,UIがフリーズしてしまいます.
そのために,別スレッドで計算をすることが必要でした.
当時は,Async/Awaitが出たばかりで,.Net Frameworkにはあまたのスレッド生成の方法があります.(Threadクラス, ThreadPool.QueueUserWorkItem, Task.Factory.StartNew, Task.Run)
そのために,わけわからず,次のようなコードを書いていたり.
await Task.Factory.StartNew(( o ) => {
Tuple<int, BigDecimal> data = (Tuple<int, BigDecimal>)o;
NextNumberBig = BigDecimal.Sqrt(data.Item2, data.Item1);
return data.Item2;
}, new Tuple<int,BigDecimal>((int)ConmaScroll.Value, bd) ).ContinueWith((t) => {
StateLabel.Content = "√";
HistoryAppend("sqrt(" + t.Result.ToString() + ")");
LoadingWindow.Visibility = Visibility.Collapsed;
IsEnabled = true;
}, TaskScheduler.FromCurrentSynchronizationContext());こうでいいはずです.
int csv = ConmaScroll.Value;
var bd2 = bd;
await Task.Run(() => {
NextNumberBig = BigDecimal.Sqrt(bd2, csv);
});
StateLabel.Content = "√";
HistoryAppend("sqrt(" + bd2.ToString() + ")");
LoadingWindow.Visibility = Visibility.Collapsed;
IsEnabled = true;SynchronizationCotextの闇に入るぐらいならSemaphoreとDispatcherObjectを使った方がいいですね.

VisualCalc Beta 2

VisualCalc Beta 3