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
)
そのために,わけわからず,次のようなコードを書いていたり.
.Factory.StartNew(( o ) => {
await Task<int, BigDecimal> data = (Tuple<int, BigDecimal>)o;
Tuple= BigDecimal.Sqrt(data.Item2, data.Item1);
NextNumberBig return data.Item2;
}, new Tuple<int,BigDecimal>((int)ConmaScroll.Value, bd) ).ContinueWith((t) => {
.Content = "√";
StateLabelHistoryAppend("sqrt(" + t.Result.ToString() + ")");
.Visibility = Visibility.Collapsed;
LoadingWindow= true;
IsEnabled }, TaskScheduler.FromCurrentSynchronizationContext());
こうでいいはずです.
int csv = ConmaScroll.Value;
var bd2 = bd;
.Run(() => {
await Task= BigDecimal.Sqrt(bd2, csv);
NextNumberBig });
.Content = "√";
StateLabelHistoryAppend("sqrt(" + bd2.ToString() + ")");
.Visibility = Visibility.Collapsed;
LoadingWindow= true; IsEnabled
SynchronizationCotext
の闇に入るぐらいならSemaphore
とDispatcherObject
を使った方がいいですね.
VisualCalc Beta 2
VisualCalc Beta 3