我正在将一个项目从winforms转移到WPF.当我的代码基于WinForms时,我使用(this.InvokeRequired)来检查线程是否具有访问权限.现在我使用基于Mainform的以下代码:
// this is the delegate declaration to Allow Background worker thread to write to Log Output
delegate void LogUpdateCallBack(String LogMessage);
// method to update the Log Window from the Background Thread
public void LogUpdate(String LogMessage)
{
Console.WriteLine("Entering");
if (!Application.Current.Dispatcher.CheckAccess())
{
Console.WriteLine("Thread doesn't have UI access");
LogUpdateCallBack callback = new LogUpdateCallBack(LogUpdate);
Application.Current.Dispatcher.Invoke(callback, LogMessage);
}
else
{
Console.WriteLine("Thread has UI access");
listBox_Output.Items.Add(LogMessage);
Console.WriteLine(LogMessage);
// listBox_Output.TopIndex = listBox_Output.Items.Count - 1;
}
Console.WriteLine("Exiting");
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是Listbox没有更新.没有错误或异常,我尝试更新其他UI控件.LogMessage正在写入Output窗口,所以我很难过.
这是控制台输出的示例:
Entering
Thread doesn't have UI access
Entering …Run Code Online (Sandbox Code Playgroud) 我是C#的新手,如果我的一些概念倾斜,请原谅我.我正在使用Canon EDSDK,为了让生活更轻松,我希望能够将错误消息看作文本而不是十六进制值.EDSDK.cs文件包含一长串错误,例如:
public const uint EDS_ERR_TAKE_PICTURE_CARD_NG = 0x00008D07;
public const uint EDS_ERR_TAKE_PICTURE_CARD_PROTECT_NG = 0x00008D08;
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想将所有这些放入某种查找表中,以便输入HEX错误代码并将实际消息作为字符串返回.例如
Hashtable EDSDKErrorCodes = new Hashtable();
EDSDKErrorCodes.Add("0x00008D01", "EDS_ERR_TAKE_PICTURE_AF_NG");
EDSDKErrorCodes.Add("0x00008D08", "EDS_ERR_TAKE_PICTURE_CARD_PROTECT_NG");
etc etc...
Run Code Online (Sandbox Code Playgroud)
在我的代码后面,我可以获取从其中一个EDSDK方法返回的错误消息,并以人类可读的形式显示它:
errorcode= EDSDK.EdsInitializeSDK();
MessageBox.Show(Convert.ToString(EDSDKErrorCodes[errorcode]));
Run Code Online (Sandbox Code Playgroud)
我的问题是..这是处理所有这些错误代码的好方法还是人们会推荐更好更有效的方法?如果是这样,我如何将哈希表填充为一系列常量而不必使用Add方法?