X



ふらっと C#,C♯,C#(初心者用) Part158
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん (ワッチョイ fe7b-Nimo)
垢版 |
2023/03/26(日) 07:31:00.51ID:2LMOL5Ty0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を3行冒頭に書くこと(1行分は消えて表示されない為、もう1行は予備)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください。見かけたらNGしましょう。相手してしまったらあなたも荒らしです
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part157
https://mevius.5ch.net/test/read.cgi/tech/1669349768/
■関連スレ
C#, C♯, C#相談室 Part97
https://mevius.5ch.net/test/read.cgi/tech/1671585518/
■コードを貼る場合は↓を使いましょう。
https://ideone.com/
https://dotnetfiddle.net/
初心者はまずVisual Studioを使いましょう。なおVisual Studioの使い方などに関しては各バージョンで違うので専用スレでお願いします
http://www.visualstudio.com/downloads/
■情報源
https://learn.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://learn.microsoft.com/en-us/dotnet/standard/class-libraries
https://referencesource.microsoft.com/
https://source.dot.net/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
++C++; // 未確認飛行 C
https://ufcpp.net/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0857デフォルトの名無しさん (ワッチョイ 95ad-tdBp)
垢版 |
2023/07/15(土) 12:52:20.24ID:x4tryG3A0
初心者です。
非同期メソッドにCancellationTokenを渡して、エラーハンドリングを行う必要があることを知りました。CancellationTokenSourceからCancellationTokenを作成して、非同期メソッドに渡していくところまではできました。ただ、ネストが深い非同期メソッド内でトークンをキャンセルしたいときに、どのようにキャンセルすれば良いのか分からない状況です。
非同期メソッドからCancellationTokenSourceのCancelメソッドはどのように呼べば良いのでしょうか。
0859デフォルトの名無しさん (JP 0H62-9/0y)
垢版 |
2023/07/15(土) 13:15:08.16ID:KExn0jd0H
トークンをキャンセルする権限を持ってるのは非同期処理側じゃなくて呼び出し元だと思うんだけど・・・
(だからcancellationTokenSourceを持ってる人だけがCancel()を実行できる)

呼び出し元から指図されたわけじゃないけど自発的にキャンセルしたいってことなら
throw new OperationCanceledException(token)
とでもすればいいんじゃないかな
0861デフォルトの名無しさん (ワッチョイ 95ad-tdBp)
垢版 |
2023/07/15(土) 15:05:06.38ID:x4tryG3A0
>>859
>>860
ご回答ありがとうございます。
awaitしている非同期メソッド内で例外を投げて、呼び出し元でcancellationTokenSource.Cancelしてキャンセルする、というのはできました。
ただ、awaitしない非同期メソッド内で例外を投げてもcatchできず、呼び出し元でcancellationTokenSource.Cancelできない状況です。
awaitして、非同期メソッド内で例外を投げて呼び出し元でキャンセルするしかないのでしょうか。
0862デフォルトの名無しさん (ワッチョイ ca2d-2eqx)
垢版 |
2023/07/15(土) 16:17:24.24ID:m7eEyKEv0
>>861
awaitしない非同期メソッドのタスクにContinueWith()で後続タスクを作って、その中でキャンセルかな。
後続タスクの実行条件はConinueWith()の引数にTaskContinuationOptionsを指定すれば変更出来る。
(エラーが起きた時のみ実行するとか)
0865デフォルトの名無しさん (ワッチョイ ca2d-2eqx)
垢版 |
2023/07/17(月) 12:47:25.02ID:oq1oEUQ30
>>863
FormBorderStyleプロパティがNone、ToolWindow系、その他で幅が変わるね。
ToolWindowだとタイトルバーに表示されるボタンの有無でもちょっと変わって、
ControlBox = falseの時が一番小さく出来る。
何故かNoneの時が一番大きくなる。

>>864
MinimumSizeがSize(0,0)でもなる
0866デフォルトの名無しさん (ワッチョイ 3210-2eqx)
垢版 |
2023/07/17(月) 21:11:29.34ID:hjrHtCYP0
自作クラスのインスタンス化したときに、
そのインスタンスのプロパティを設定するやりかた? を教えてください。
うまい言い方ができないので、例を示します。
自作クラスで
class Square
{
double width
double height
}
があったとして、
 Square square = new Square(){width = 3, height =2}
としたならば、
 console.Writeline (square.ToString())
とすると
 6
 と表示されるようなイメージです。
何がしたいのかというと、 IPropertyChanged を使って、中の 
プロパティが変化したときに、square が変わったということを認知したいのです。
0867デフォルトの名無しさん (ワッチョイ 3279-EJzg)
垢版 |
2023/07/18(火) 02:03:58.47ID:BpIlHiPB0
Writelineで6を表示したければToStringをoverrideしてやればいいだろうまでは思いましたが
貼られたコードと「何がしたいのかというと」が全く繋がってなくて、恐らくこれは誰も質問を理解できてない状況ではないでしょうか
私の感想としてはIPropertyChangedとやらを使いたければ使えばいいだけの話ではないでしょうか
0868デフォルトの名無しさん (ワッチョイ ca2d-2eqx)
垢版 |
2023/07/18(火) 02:28:36.72ID:GDp0BnYT0
例には書いてないけどIPropertyChangedイベントを購読して、イベントが来たらConsole.WriteLine()するんでしょう
で、IPropertyChangedの実装方法が知りたいと


public class Square : INotifyPropertyChanged
{
public event PropertyChangedEventHandler? PropertyChanged;
private void SetProperty< T >( ref T field, T value, [CallerMemberName]string propertyName = null )
{
if ( field.Equals( value ) )
{
return;
}
field = value;
PropertyChanged?.Invoke( this, new PropertyChangedEventArgs( propertyName ) );
}

private double _width;
public double Width
{
set => SetProperty( ref _width, value );
get => _width;
}

private double _height;
public double Height
{
set => SetProperty( ref _height, value );
get => _height;
}
}
0869デフォルトの名無しさん (ワッチョイ 87e5-XQTJ)
垢版 |
2023/07/18(火) 08:44:49.63ID:3b5O2M5n0
>>863 >>865
なんか頭の中で136ってもっとおっきいイメージになってた、すまないw
アイコンやコントロールボタンが表示できる最低サイズだったね
面白いことに、FormBorderStyle=Noneの時に
コンストラクタでどんだけ小さいWidth指定しても136になるけど
その後でShown等のフォームが生成された後の時点でWidth指定すると2までは縮まるんだな
SizableとかだとShownでやっても136になるけど
0870デフォルトの名無しさん (スッップ Sd94-XM1G)
垢版 |
2023/07/18(火) 10:03:44.12ID:W6YFjoCEd
>>865
>>869
はーやっぱり知識ある人は知ってるんですねー
こういう理屈じゃないところでいちいち悩まないといけないのが大変ですわ

まったく別の話なんですけど、
今これ>>832作ってて面白いこと気づきました

MouseClickイベントって右クリック・左クリック別に処理を分けられないじゃないですか
e.Button == MouseButton.Left とかが使えるMouseDown使えって言われるんですけど
bool isRightClickみたいなフィールドつくって、MouseDownのイベントハンドラで右・左判別して結果をisRightClickに設定
んで、MouseDownイベントの直後にMouseClickイベントも発生するからこいつのハンドラでisRightClickを取得して右・左別に処理わけることができた!

ってこれもみんな普通にやってんのかな・・・自分としては大発見なのだが。
今左右クリックやD&Dで細かい動きを作ってるんでこれは貴重な発見だった
0871デフォルトの名無しさん (スププ Sd94-uP9V)
垢版 |
2023/07/18(火) 10:04:51.17ID:5Ch5Zuv0d
>>867
>>868
ありがとうございます
質問のしかたが悪くうまく伝わっていないのですが回答は知りたかったことの一部でもありその部分については理解しました。

public class Hoge :IpropertyChanged
{
public Square square


}
とした時に
squareが値をもっていないことから、methodでsquare.widthの値を変えたとしてもsquareか変化したことを認識できないとの理解です
SquareにIPropertyChangedを噛ませてhogeのpropertyが変わったとする方法もあるのかも知れませんがsquare自身に値を持たせる方法があったら教えて下さい
0873デフォルトの名無しさん (スッップ Sd94-XM1G)
垢版 |
2023/07/18(火) 11:52:13.49ID:W6YFjoCEd
>>872
今いろいろ確認して、間違えてたことが分かりました
ごめんなさい

複数のラベルをForm上に動的配置したうえで、このラベル全てにクリック系のイベントを追加したんです。
この際、イベントハンドラも自分でコードを書いたのですが、Label_MouseClickイベントハンドラの引数である e の型を、間違えてMouseEventArgsではなくEventArgsとしていたため、e.Buttonが使えなかったというオチでした。
e.Buttonが使えない点を除いて問題なく動いていたので気づきませんでした

ふぅ・・・何やってんだか・・・
0876デフォルトの名無しさん (ワッチョイ 73ae-/jfo)
垢版 |
2023/07/18(火) 14:42:32.76ID:INtka+wY0
VBAはVB.netに仕様変更する気が無いんだろうな・・・
0878デフォルトの名無しさん (ワッチョイ 4dc6-l/Dq)
垢版 |
2023/07/18(火) 16:00:19.51ID:zVxGTRP30
>>871
細かいけどINotifyPropertyChangedじゃない?
SquareにINotifyPropertyChangedを実装して、
Hogeの方でこういう風に
Square square {
get { return _square; }
set {
if (_square is not null) _square.PropertyChanged -= OnSquareChanged;
this._square = value;
if (value is not null) _square.PropertyChanged += OnSquareChanged;
}
}
void OnSquareChanged(object sender, PropertyChangedArgs e) {
this.OnPropertyChanged(nameof(this.square));
}
0879デフォルトの名無しさん (ラクッペペ MM34-iMTa)
垢版 |
2023/07/18(火) 16:06:27.35ID:vLiOabGzM
VBA - VisualBasic
https://learn.microsoft.com/ja-jp/office/vba/library-reference/concepts/getting-started-with-vba-in-office

Office add-ins - C#
https://learn.microsoft.com/ja-jp/office/dev/add-ins/overview/office-add-ins

Vsto - C#
https://learn.microsoft.com/ja-jp/visualstudio/vsto/create-vsto-add-ins-for-office-by-using-visual-studio

Office Scripts - TypeScript(JavaScript)
https://learn.microsoft.com/ja-jp/office/dev/scripts/overview/excel
0883デフォルトの名無しさん (オイコラミネオ MM71-9/0y)
垢版 |
2023/07/18(火) 22:23:27.30ID:5UWIDgazM
お前らも含めてだが…基本的なことを勘違いしてるんだろう
IpropertyChangedが必要なのかも怪しいがそれは置いておく

通常似た様なものがあった場合
面積に相当するAreaプロパティが設定されている
binding対象はHoge.Square.Areaに普通はする

さて、
WidthやHeightが変更になった場合にAreaはその都度変化を通知して欲しいのかどうかも気になる
WidthとHeightを同時に変更したい場合メソッドを使って適切に変更しないとゴミがでるぞ
0884デフォルトの名無しさん (オイコラミネオ MM71-9/0y)
垢版 |
2023/07/18(火) 22:33:21.86ID:5UWIDgazM
Squareの値は各種プロパティを持ったオブジェクト自体でありそれを面積とみなすのはおかしいと言うこと
ToString()をoverrideして面積を出すも間違っている

ToString()で出すのは
四角形 幅:3 高さ:4 面積:12
と言う各種情報
0885デフォルトの名無しさん (ワッチョイ 3210-NBo5)
垢版 |
2023/07/18(火) 23:28:46.06ID:HED9e7490
>>882
エスパー ありがとうございます。
square を 構造体にかえて 今までやりたかったことが解決しました。
>>883 ,>>884  ありがとうございます。
勉強になりました。
0887デフォルトの名無しさん (ワッチョイ 4dc6-l/Dq)
垢版 |
2023/07/19(水) 13:17:55.70ID:rfnRytk30
型が違うから

class Hoge { public string Piyo; }
class Fuga { public string Piyo; }
と同じメンバを持った2つのクラスがあっても
void Test(Hoge hoge) { ... }
にFugaを渡せないのと同じ
0888デフォルトの名無しさん (ブーイモ MM69-IGBM)
垢版 |
2023/07/19(水) 13:33:43.83ID:Iak4bgJxM
hoge(pred.Invoke)で渡せる
0890デフォルトの名無しさん (ワッチョイ ce6e-rP6O)
垢版 |
2023/07/20(木) 19:04:03.42ID:oZtgKOtx0
非同期処理について質問です。業務でWPFいじってるんですけど

1 起動画面→2 起動画面表示してる間に重い処理とか色々→3 ログイン画面→4 メイン画面

という流れになっています。それで重い処理の部分がtask runになっていてあぁ非同期処理ってやつかと
なんですがやたら起動画面が長いんです。デバッグしてみるとその重い処理が実行されてるとき他の処理は実行されてなくて
結局普通に1〜4が一直線に進んでるだけじゃない?と

自分の理解だと非同期ってその処理をどっか他の場所でやっといてもらってそれ以外は全部通常通りに流れると
この場合だとたとえば3や4のウインドウが出る処理が進んでいってもその裏で重い処理をやってるみたいな
2の部分が短くなるから起動画面も当然短くなるはずだろ……と思ってたんですが

非同期ってそういうもんじゃないんでしょうか
0898デフォルトの名無しさん (ブーイモ MMba-mCwd)
垢版 |
2023/07/21(金) 08:56:24.44ID:eg4croCbM
画面が固まってるかどうかってそんな大事なことか?
0901デフォルトの名無しさん (ブーイモ MM5e-IGBM)
垢版 |
2023/07/21(金) 11:29:51.89ID:69ts+SDiM
業務アプリでログイン画面表示前に終わらせないといけないやたらと時間のかかる重い処理ってどういうの?
ゲームやJavaアプリではあるけどC#で作る業務アプリでは個人的には経験したことないんだけど
ネットワーク経由で自動アップデートを走らせてるとか?
0904デフォルトの名無しさん (ブーイモ MMba-mCwd)
垢版 |
2023/07/21(金) 20:26:40.73ID:eg4croCbM
>>901
そういうのならスプラッシュで長々と起動表示するより
さっさと画面見せてプログレスバー出した方が良くね
端的にいうとエクリプスみたいなのは嫌い
0909デフォルトの名無しさん (ブーイモ MM8f-2YhC)
垢版 |
2023/07/22(土) 18:21:41.76ID:k3sQ1muHM
そらWEBアプリが流行るわな
とりあえず画面は出てくるしな
0917デフォルトの名無しさん (スッップ Sdff-cTWz)
垢版 |
2023/07/23(日) 21:00:26.02ID:DI++90CVd
>>915
何のとか関係ないんだよね>>899に書かれてる通り、
応答なしってなった場合にユーザーがアプリが固まったって思って不安になったり、
人によっては強制終了させたりすることを回避するのが目的でみな実装してると思うよ
0921デフォルトの名無しさん (スッップ Sdff-cTWz)
垢版 |
2023/07/24(月) 08:15:20.93ID:WyKfXWoDd
>>920
もともとは>>890から来てる話のつもりだけど
重たい処理を裏で実行させて画面は動いてます(応答なしになってません)ってのを
ユーザーに伝えるためにプログレスバーだしてると思ってるんだが違うのか?
非同期でもなくプログレスバー出して進捗報告してるだけなら言ってる通りかもね
0923デフォルトの名無しさん (スッップ Sdff-cTWz)
垢版 |
2023/07/24(月) 11:10:30.20ID:WyKfXWoDd
大多数のユーザーが使う画面作ってないのかわからんけど
10秒程度で画面クリックしたら応答なしになるだけで文句いってくるところもあるからね
10分越えで非同期とかはぬるすぎ
まあこの辺までくるとスレチな感じだから言い逃げになるけど自分はここまでにするわ
0933デフォルトの名無しさん (ワッチョイ cf68-6+wX)
垢版 |
2023/07/30(日) 13:16:32.79ID:qP2cEP2w0
>>929
逆に聞きたいけど長時間応答するしかねえって事もあるんじゃないの?
意図的にそうしてるとか
0934デフォルトの名無しさん (ワッチョイ cf68-6+wX)
垢版 |
2023/07/30(日) 13:16:34.66ID:qP2cEP2w0
>>929
逆に聞きたいけど長時間応答するしかねえって事もあるんじゃないの?
意図的にそうしてるとか
0936デフォルトの名無しさん (ワッチョイ cf68-6+wX)
垢版 |
2023/07/30(日) 13:54:56.32ID:qP2cEP2w0
実行中の処理に影響与えないように応答させないのって普通じゃね?
0937デフォルトの名無しさん (ワッチョイ 3ebb-bWks)
垢版 |
2023/07/30(日) 14:13:33.41ID:2ZbxDykr0
非同期にするオーバヘッドがないぶん処理が早く終わるしな
0946デフォルトの名無しさん (スフッ Sd8a-kvF/)
垢版 |
2023/07/31(月) 13:17:06.46ID:lng3H2OQd
>>942
応答出来ない=次に応答するのが計算が終わったタイミング
と言うことになる
つまり開始後中断したくてUI(例えば停止ボタン)押して
実際に止まるのが計算完了後で
計算結果が表示される直前に終了してくれるオマケ付き
0949デフォルトの名無しさん (ワッチョイ becf-WE/L)
垢版 |
2023/08/01(火) 01:57:41.21ID:l/YBSfNu0
https://atmarkit.itmedia.co.jp/ait/articles/1702/22/news010.html
>  Windows上で実行されるアプリケーションのウィンドウは、応答がない状態になると、
> ウィンドウタイトルに「(応答なし)」と表示してユーザーに知らせます。

> “応答がない状態”とは、アプリケーションのプロセスが持つウィンドウオブジェクトが
> 「ウィンドウメッセージ(Window Message)」に5秒(既定)以上、応答しなくなる状態を指します。

こんなん出たんですけどとか言われたら恥ずかしいだろ
レス数が950を超えています。1000を超えると書き込みができなくなります。

ニューススポーツなんでも実況