ふらっと C#,C♯,C#(初心者用) Part141
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part139
https://mevius.5ch.net/test/read.cgi/tech/1538646998/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 指定日時後の起動はタスクスケジューラに任せた方が良いと思う
GIU側の仕事はスケジューラヘの登録と指定日時にスケジューラが起動したプロセスとの通信 なんか、JavaScript そっくりになってきる。JavaScript は汚いのにな・・・。 JavaScriptそっくりもクソも、JavaScriptのasync/awaitはC#が発祥だぞ
それをJavaScriptもPythonもKotlinもそっくりそのまま真似した
汚い機能だと感じる君の感覚は否定しないが、好みは別にして非同期プログラミングのデファクトスタンダードであるのは事実だ 割り込んですまない。
SolrNet を使ったことあるヤツがいたら知恵を貸して欲しい。
SolrNet を使ってこんなことをやってみた。
Startup.Init<[適当なモデルクラス]>( [SolrのサーバーURL] );
var solr = ServiceLocator.Current.GetInstance<ISolrOperations< [適当なモデルクラス] >>();
まあごく当たり前の初期処理なのだが、実行すると2行目の Current の中身が null でヌルポエラーになる。
原因がわからなくてしばらく悩んで、GitHub にあるサンプルコードをダウンロードしてきてコピペしても同じだったのだが、
ダウンロードしたソリューションをビルドして実行するとこの部分を問題なく通過する。
またしばらく悩んで、nuget でダウンロードしてくる SolrNet のバージョンに違いがあることに気がついた。
どうやらバージョンが 0.5 以下だと通過し、それ以降のバージョンだとヌルポエラーになるようだ。
最新のは 1.0.1 だったか、このバージョンで上の部分を通過させるに必要な事はなんだろう。心当たりがあったら教えて欲しい。
0.5 の辺りって、その辺りを境に他のパッケージを参照するようになってるぽいのだけど関係があるだろうか。
これを使えってご指定なんだよな。。 >>568
一応これでできるけど、これがベストかどうかは知らん
private static async Task WaitTillAsync(DateTime dt)
{
var now = DateTime.Now;
var span = dt > now ? dt - now : TimeSpan.Zero;
await Task.Delay(span);
}
private async void button1_Click(object sender, EventArgs e)
{
await WaitTillAsync(DateTime.Now.AddSeconds(10));
MessageBox.Show("10秒後にこんにちは");
}
>>566
マジですかw >>585
それだとNTPで時計合わせが発生したらズレる
素直にSystem.Timers.Timerで500ms位ごとにElapsedさせて、
指定時刻を過ぎてないか見るのが簡単。
マイクロ秒まで精度出したいっていうのなら、そもそも使うOS間違ってる。 みなさんありがとうございます。
一応自分で書いていたのは>>585さんに近くて設定時刻前ならそのまま、設定時刻を過ぎてたら一日足して現在時刻との差をawait Task.Delayしました。
タイマーの精度はそんなに必要なく1分間隔で大丈夫で、24時間起動で毎日朝8時から夕方17時までプログラムを止めるみたいな感じです。
同じプログラムを大量に起動するので処理はなるべく軽いのが希望で
ループ処理で毎分チェックするようなのは重いイメージがあるのですが大丈夫でしょうか?
また、時計合わせが発生したらズレるというのはどういうことでしょう? >>588
ポーリングが嫌ならタスクスケジューラを使えばいい
プログラムから簡単に登録できる >>586
えらい重箱の隅だけどまあそうだねw
private static async Task WaitTillAsync(DateTime dt)
{
await Task.Run
(
() => { while (dt > DateTime.Now) Thread.Sleep(500); }
);
} >>590
プロセスが落ちることを想定せよ
NTPなんかより遥かに影響を受ける可能性の高い事象である
やり直し >>590
Thread.Sleepの所Task.Delayにしても大丈夫でしょうか? >>592
どこでも
質問者は24時間起動って言ってるんだから当然想定すべきだよ >>593
もちろんいいと思うけど、
() => { while (dt > DateTime.Now) Thread.Sleep(500); }
が
async () => { while (dt > DateTime.Now) await Task.Delay(500); }
に文字数が増えて、使うTaskも増えて、かといってメリット無いような気が await, async は、簡単なことを難しくしてしまう。 C#は、もはや、C++やCとは似ても似つかなくなってしまってる。
control flow がめちゃくちゃ複雑で、何をやってるのかわからなくて
生ポインタの1,000倍危険。 () => { while (dt > DateTime.Now) Task.Delay(500).Wait(); }
の方が素直か。
何かTask.Delay使った方がいい理由ってあるかな PDFファイルからテキストを抽出する方法でオススメはありますか?
調べたところiTextSharpとPDFBoxは見つかりましたが、たまに読めないPDFがあるのが残念です。 >>599
一番確実なのは製品版のAcrobatを使うことではないでしょうか >>598
この流れでもう二回書かれてるけどawaitしないとその間メッセージキュー処理できないでしょ
あとTimer使えば済むロジックを自分で書かないの >>601
私の技術力が低いので初心者用スレで質問させていただいたのですが、それを購入したとして初心者でもネットで調べる程度で可能ですか?
上に書いたiTextSharpとPDFBoxは、ネットに転がってたソースを丸パクリでやりました。 >>595
後者はTask.Run()が不要だから、むしろタイプ量は減るよ。
await Task.Run( () => { while (dt > DateTime.Now) Thread.Sleep(500); } );
と
while ( dt > DateTime.Now ) { await Task.Delay(500 ); } ん? Task建ててる部分見てなかった、俺のレスのは忘れて 後、細かいことを言うと、
Task.Run()でThread.Sleep()だとSleep()してる間もThreadPoolのThreadを1つ占有してしまうが、
Task.Delay()ならその間はThreadPoolのThreadが開放される。 >>602
スリープするのはUIスレッドじゃないのでそれはありませんよw
これ、ちょっと前にも書いたけど、Timerを使った方が可読的になる場合ももちろんあるし、
そうでない場合もある。
つまり、別に車輪を再発明してるんじゃありません。
質問者がどっちのケースかは分からない >>604
ああ、なるほど。
正直非同期メソッドって書きなれてないから目からうろこ 待つだけの処理で1スレッド消費しちゃうのは良くないな
かといって単純にAwaitを使っただけのコードだと、どこかでデッドロックが生まれる可能性が増えたり、待てずにメインスレッドが抜けてしまったりする危険が出てくる
ここはコルーチンしか無いでしょ!!コルーチン最高!!!! タスクスケジューラはC#自体の機能じゃないからな、漢は黙ってコルーチン!!! 私、待つわ〜何時までも待つわ〜
例え対象スレッドが落ちていても〜 >>583
kotlinはそっくりそのままと言えるものではなく
奇怪な何かになってる >>614
次はWindowsが落ちることを想定しよう C# → C++/MFC なら大して変わらないかも 言うほど難しくはない
同じものを作るために3倍程度の工数がかかるだけ 個人で使うものではない感じですか?
openglを扱うためには裂けては通れないようですが >>621
opengl c# でググったらいろいろヒットするが
DllImportがめんどくさいのはわかるが避けて通れない理由があるのか?
C++でやらなきゃって思うのならC++のスレへどうぞ >>621,623
> 個人で使うものではない感じですか?
個人で使うのになんら障害はない
> openglを扱うためには裂けては通れないようですが
OpenTKとかあるし別に必須じゃない
> ラッパーのほうが情報すくなくて難しそうなので
じゃあC++で学習すれば? このレベルでOpenCVに手を出して何ができるんだって感じもある
チュートリアルを通してやるのがせいぜいか >>617
テンプレートの深みにはまらなければC++のほうが素朴で簡単 この人3ヶ月前からこういう質問ばっかしてる
一体いつになったら手を動かすんだろう やっぱコルーチンだわ
コルーチン質問がいくらあっても全くロックが起きとらん!スレッドを丸々潰してもいない!最強!! >>620
そんなかからん。せいぜい 2割り増し程度。
でも、ブラックボックスが少なくて何やってるのか分かりやすいので、
はまりにくいかも。
C#のasync, awaitなんて初心者が理解できるものではない。 C#はクラスライブラリも簡単に逆アセンブルできるからブラックボックスは少ないよな WPF, Windows Form の二種類があったり、Xamarineを使うかどうかが
あったり、C#も複雑極まりないんだね。GDI がセンスがない関数群だったので
嫌われたこと、MFCが汚かったこと、Direct3Dが汚かったこと、COMが
汚かったこと、ActiveX がさらに訳分からなかったこと、の再来を感じる。
「非同期処理」もスレッドをいくつでも起こすタイプや、Poolみたいな
ことをやるタイプ、以外にいくつもあって、さらに最後に async, await
が Synax Suger になっているんだね。なんという複雑さ・・・。
また、スレッドを起こすのに 1MB もメモリが必要・・・・。
なんという無駄使い。 結局、.Net Standard が破棄されて、.Net Core だけが残るといううわさを聞いた
けど、やっぱり Xamarine が捨てられていくのかな。買収時点で最初から
予想されたことだけど。 >>634
> 「非同期処理」もスレッドをいくつでも起こすタイプや、Poolみたいな
> ことをやるタイプ、以外にいくつもあって
具体的には?
いくつもあるなら2,3挙げてみてよ 多分、
1. Thread
2. ThreadPool
3. Event-based
4. Async Programming Model
5. Reactive Extensions
6. Task-based
7. async/await
の 7種類だと思う。もっとあるかも知れないけど。 APM、EAP、TAPなんかを言ってるのかね? 単に時代の流れじゃないの
レガシーをタスクにする方法もあるし、.NETはネイティブスレッドではなかろう
開始元へ差し戻しが多いからawaitがあるだけで結局Task推奨になってると思うけど
議論が活発なのは結構だが、ぽこぽこ増えていく言語バージョンを見てると不安は抱く 時代の流れだねぇ。
今ならTaskとasync/awaitだけ覚えておけば事足りる。
Rxも場合によってはあれば便利だけど。 async/awaitの効率は最近は大幅に改善されつつあるよ
ただし.NET Coreに限る 効率以前に、訳分からん。
設計した人が実は能力が足りないんだって。 アメリカ人はなめ過ぎてる。
独占的地位を利用して。
こんなくそ設計しやがって。 (ワッチョイ 8261-VUEs)
この人、年中非同期処理が理解できないと繰り返し言ってんな
いい加減理解しろよw 良かったな
訳わからんものが他の言語にも波及したぞ
※非同期プログラミングの次回作にご期待ください C# は VB と似ており、C++ とは似ても似つかない。 >>642
17年の歴史があって、技術的トレンドを比較的積極的に取り込んできてる言語に
それを言うのは言いがかりというかお門違いだろうw >>647
そいつにとっては、ぼくの理解できないもの=設計が悪い、だからな。
自分がバカだとは認められないんだろう。 c#にはあってVBにはないものってないんだよな
.net CoreでもVB採用されてるし >>651
スパゲッティーなアルゴリズムを作ってしまっただけなのに気付いてない。
理解できないのではなく、馬鹿馬鹿しくて腹が立つだけ。
頭のいい人は、もっと良い方法がすぐにひらめくから。 C# のこの書き方は、35年前の Microsofot の N88-BASIC の
def fn にそっくり
[C#]
int f(int n) => n >= 1 ? n * f(n - 1) : 1;
[N88-BASIC]
DEF FN名前 [ ( 引数名 { , 引数名 } ) ] =式
10 DEF FNZEIKOMI(P)=P*1.08
20 INPUT "zeinuki kakaku";KAKAKU
30 PRINT "zeikomi kakaku";FNZEIKOMI(KAKAKU) ま、作ったアプリではなくソースコードを自慢するようになったらプログラマは引退したほうが良い キブハブとかいう謎の団体に監視されてるからソースのエレガントさにも気が抜けない時代 アメリカって、バイナリだと信用されないんだろうか。
アメリカは悪い人だらけなので武器を持たなきゃならないのが、それが安全な日本にまで波及していて、
セキュリティーソフトのせいでPCの能力は結構落ちるし、自作プログラムが誤検出されて
風評被害は出るしでいやな時代になったな。 アメリカじゃ、大手企業から以外はバイナリが信用できないから、
無料ソフトのバイナリが入手できない。それで日本まで生産性が下がって来た。
いつのまにか、そんな必要のない日本まで巻き添えになってる。
それに日本人は気づいてない。 >>665
持ってる技術に対して歩んできた人生がクソ過ぎてバランスが悪い >>659
ソースの綺麗さはプロダクトの品質、価値に大きな影響を与える
君はなにもわかってない >>669
ありますがどこの企業も社外秘でしょう
あなたの会社のコードを計測してみてください
話はそれからです >>670
そうですか?
じゃあ、有名なオープンソースとか参考にしてやってみますね >>670
ソースの綺麗さを計測する定量的な評価方法を示してくれ。話はそれからだ。 >>672
ググれ
コードメトリクスを測定する手段は無数にある ツリーを表示する部分はtreeviewですが、treeviewの中身を表示する領域はどのツールを使う運でしょうか
エクスプローラのメイン画面のことですね >>675
そんなものはない
何を表示したいかなんてアプリ次第だろ
要件に応じて自分で作るんだよ >>675
エクスプローラのメイン側はリストビューだよ 回答有り難うございます。
wpfテンプレートを使っているのですが、リストビューというツールは存在しないようですが、wpfにありましたか? ■ このスレッドは過去ログ倉庫に格納されています