チェスボードのプロジェクトをシリアルポートでPCに接続します。チェスボードは 'g1f3'のようなコマンドを送信します。私はバックグラウンドで動作し、実際のボード上で行った移動をクリックするクリッカーアプリケーションを作りたいと思います。私はチェスのクライアントのウィンドウのタイトルを認識していた。ピクセルモニタとしてのBackgroundWorker - C#
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
backgroundWorker1.ReportProgress(0);
System.Threading.Thread.Sleep(1000);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
windowName = GetActiveWindowTitle();
for (int i = 0; i <= windowName.Length - 3; i++)
{
if (windowName[i] == 'v' && windowName[i + 1] == 's' && windowName[i + 2] == '.')
{
textBox1.Text = "Game active";
break;
}
else
textBox1.Text = "Game not recognized";
}
}
チェスクライアント名のようなウィンドウ:「XXXXX XXXXX対」私はこのコードを持っています。これは "ほとんど"うまく動作します。 (アプリのウィンドウが高速またはランダム時間的に遅延しても1つのスイッチ後に変更されている場合)、「ほぼ」ためには、時にはそれがスローされます。
型「System.Reflection.TargetInvocationException」の未処理の例外がmscorlib.dllがで発生した
追加情報:呼び出しの対象によって例外がスローされました。
誰も私にこれをどう対処するかというヒントを与えることができますか?
編集:私はここからGetActiveWindowTitle()のコードだ:それは時々ヌルスローHow do I get the title of the current active window using c#?
を、なぜそれがありますか?
あなたの 'ProgressChanged'イベントハンドラで例外が発生します。実際に*間違っているものが見えるように内部例外を調べます。 – MicroVirus
それは言う:オブジェクト参照は、オブジェクトのインスタンスに設定されていません。これは、アクティブなウィンドウのタイトルを取得することです。私はwindowNameをテキストボックスに置き、しばらくそれを見たことがありません。だから私は時々nullだと思う。しかし、それはなぜですか?私はここからアクティブなウィンドウのタイトルのコードを取得する:[リンク](http://stackoverflow.com/questions/115868/how-do-i-get-the-title-of-the-current-active-window-using -c) – h2pc
私の魔法の球は、 'GetActiveWindowTitle'は有効な文字列を返さず、むしろ' null'を返すと予測します。 – MicroVirus