IISとASP.NETとApplicationPoolをいじっていたらよくわからない現象に悩まされたこと
原因がわかっていないので私が気付いている範囲で環境とかやったことを書きます
環境
アプリ
ASP.NET MVCでWeb API 2 (だっけ?)を作成
Web API内ではサードパーティー製の64bit DLL (Cで使うやつ)をラップしたDLLをP/Invokeで使用
サードパーティー製DLLはそこそこ大きくてそれが読むデータも大きい (データサイズは関係ないかも)
やったこと
Administratorですべてセットアップ(ランタイムのインストールとか)
アクセス権とか面倒なのでAdministratorで動くApplicationPoolを新たに作成
アプリは上記ApplicationPoolで動かすように
現象
OSを起動してWeb APIにアクセスすると30分以上応答がかえって来ない
P/InvokeしていないAPIにアクセスするとすぐに応答を返してくれる
応答が返ってこない時のディスクアクセスとかCPU使用率はそんなに上がっていない
一度応答を返すとそのあとは普通に返ってくる
応答を返し始めるタイミングは不明 (ログとか見ていると突然返す感じ)
iisreset等で再起動かけた場合はすぐに返ってくる (返ってこない場合もあったかも)
応答が返ってこない間にApplicationPoolのpingエラーで勝手にApplicationPoolが再起動させられているっぽい (?)
解決策 (?)
使用するApplicationPoolをDefaultAppPoolに戻したら現象は発生しなくなった
ユーザー(Administratorsグループ)を新規に作ってそのアカウントでApplicationPoolを動かしても問題なし (新規ユーザーは一度もログインしていない)
うん、全然わからない
とりあえず動いているからいいやって感じで終了
WPFで雑にウォーターマーク付きのテキストボックスを作る
ウォーターマークのあるテキストボックス(未入力だと透かしがでるやつ)がたまにほしくなりますよね
ガッツリ作る必要もない時はテンプレートで適当に作ってしまえばいいんじゃない?
<Window.Resources> <Style x:Key="WatermarkTextbox" TargetType="{x:Type TextBox}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TextBox}"> <Grid Background="White"> <ScrollViewer x:Name="PART_ContentHost" Margin="5,0,0,0" VerticalAlignment="Center"/> <TextBlock x:Name="WaterMarkLabel" Text="{TemplateBinding Tag}" Opacity=".5" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5,0,0,0" Visibility="Collapsed"/> </Grid> <ControlTemplate.Triggers> <Trigger Property="Text" Value=""> <Setter Property="Visibility" TargetName="WaterMarkLabel" Value="Visible"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <Grid Background="Blue"> <TextBox Style="{StaticResource WatermarkTextbox}" VerticalAlignment="Center" HorizontalAlignment="Center" Width="200" Tag="Input please"/> </Grid>
できあがり
TextBox.TagをTextBlock.Textに入れて、TriggerでTextが空白の時に表示しているだけです
Xamarin.iOSでUITextFieldの変更イベントをとる
CodeBehind(?)でUITextFieldの変更イベントを知りたいとおもいました
ほかのコントロール(UISlider等)と同じようにやればいいとおもっていました
var _text = new UITextField(); _text.ValueChanged += (sender,e)=> { // 変更 };
こんな感じに書いたんですが、これじゃダメだったんですね
_text.AddTarget((sender,e)=>
{
// 変更
},UIControlEvent.EditingChanged);
これなら呼ばれます
理由はNativeなやつにValueChangedが無いからとかなんとかってBugzillaに書いてありました
864 – ValueChanged event is not fired for UITextField
多分忘れたころにまた引っかかると思います