小编All*_*ons的帖子

通过Xml文件配置log4net TextBoxAppender(自定义appender)

这是我的问题的后续问题:灵活的日志记录界面......

我现在想为我的WinForms 2.0应用程序为多行TextBox编写一个自定义log4net appender.其中一个StackOverflow成员devdigital已经向我指出了这个链接:

TextBox Appender

但是,本文没有介绍如何通过Xml文件配置这样的appender.配置此appender的唯一问题是我们需要将对TextBox对象的引用传递给此appender.

那么可以使用Xml文件配置它吗?或者只能以编程方式配置这些appender?有哪些选项使其可配置或松散耦合,可能使用Xml文件和代码的组合?

谢谢.

c# log4net log4net-appender

18
推荐指数
3
解决办法
2万
查看次数

使用C#中的复杂用户定义类型(UDT)调用VB6 DLL函数

我正在编写一个C#应用程序来调用第三方VB6 DLL.我在References-> COM选项卡中添加了对VB6 DLL的引用.

DLL中的特定方法采用VB6 UDT(用户定义类型)作为参数.

此UDT在COM的自动生成的.NET包装器中显示为结构.该结构具有许多子UDT /结构以及VBA.Collection类型的成员(如.NET元数据所示).它还有常规数据类型,如string,short,double,int等.

我在我的C#代码中初始化这个结构为:

udtEmployee udtEmpData = default(udtEmployee);
Run Code Online (Sandbox Code Playgroud)

我也试过了

udtEmpData = new udtEmployee();
Run Code Online (Sandbox Code Playgroud)

如果我没有使用default或new初始化它,我无法编译我的C#代码,因为编译器抱怨使用未分配的变量.

我需要传递这个结构作为参考.我是这样做的:

clsEmployee.SetData(ref udtEmpData);
Run Code Online (Sandbox Code Playgroud)

在调用VB6 DLL的这个方法时,我收到错误:

错误:尝试读取或写入受保护的内存.这通常表明其他内存已损坏.

原因是什么,解决方案是什么?

注意,我无法更改VB6 DLL,因为我没有其源代码.我正在使用VS 2005.

编辑1:

这是一个完整的背景:

有一个本地开发的ERP产品,它支持使用VB6的附加开发.它有一个配置文件,它指定要加载的附加DLL的名称.然后,这些插件将显示在ERP应用程序的菜单中.在菜单上单击,ERP调用名为StartAddOn()的函数,该函数应存在于VB6 DLL中.

我想在C#中开发附加组件,所以我开发了一个带有StartAddOn方法的简单VB6插件,后者又将控制权传递给我的.NET DLL.

.NET DLL使用ERP公开的业务类,并来回传递数据对象.在.NET DLL中,我添加了对ERP供应商发布的DLL的COM引用.

所以架构是这样的:ERP-> VB6 AddOn和StartAddOn方法 - > .NET DLL->使用ERP供应商发布的COM DLL及其数据类(结构/ UDT).

如何调试内存错误?

c# vb6 dll com-interop user-defined-types

9
推荐指数
1
解决办法
691
查看次数

WinForm应用程序的MVVM实现

我正在尝试为我的WinForms应用程序实现MVVM(模型视图ViewModel)模式.我正在使用C#2005.

我的应用程序有一个MainForm(View),带有2个多行文本框和3个按钮.第一个文本框的目的是在单击按钮时显示应用程序正在执行的操作的运行注释.我继续向TextBox附加行以更新用户正在发生的事情.第二个文本框的目的是更新用户有关任何错误条件,冲突,重复值; 简而言之,用户需要审查的任何内容.它将每条消息分类为INFO或WARNING或ERROR.3个按钮中的每一个都执行一个动作,并不断更新2个文本框.

我创建了一个MainFormViewModel类.

第一个问题:当用户点击MainForm中的按钮时,我必须清除2个文本框的内容,并禁用该按钮,以便在第一次操作完成之前不能再次单击该按钮.我应该直接在MainForm中执行此文本框和按钮更新,还是应该以某种方式使用MainFormViewModel?

第二个问题:按钮单击调用MainFormViewModel类上的方法.在调用方法之前和调用方法之后,我想在第一个文本框中显示类似"操作A已启动/已结束"的消息.我这样做是通过调用一个Common类来实现的,该类具有一个Log方法来将消息记录到TextBox或文件或两者.再次,是否可以直接从MainForm执行此操作?我在事件处理程序的开头和结尾调用此日志记录方法.

第3个问题:如何将ViewModel中的错误消息传播回View?我创建了一个自定义的Exception类"TbtException".那么我是否必须在每个按钮中写入2个catch块,一个用于TbtException,另一个用于遗传Exception类?

谢谢.

c# design-patterns

7
推荐指数
1
解决办法
1691
查看次数

无论何时拨打电话,都要打开免提电话

我的要求是每当拨打电话时打开免提电话.我尝试了以下代码,但它无法正常工作.事实上,扬声器电话在通话中间打开,第二个电话来了!

package in.co.allsolutions;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
//import android.view.View;
import android.widget.Toast;
import android.media.AudioManager;

public class MyTelephonyBroadcastReceiver extends BroadcastReceiver {

      @Override
      public void onReceive(Context context, Intent intent) {

            AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
            audioManager.setSpeakerphoneOn(true);
            Bundle extras = intent.getExtras();            
            if (extras != null) {

                  String state = extras.getString(TelephonyManager.EXTRA_STATE);
                  Log.i("AS", "Message Received. State = " + state + ", Mode = " + audioManager.getMode());
                  //audioManager.setMode(AudioManager.MODE_NORMAL);
                  //audioManager.setSpeakerphoneOn(true);
//                  if (state.equals("OFFHOOK"))
//                  {                  
                  //audioManager.setMode(AudioManager.MODE_CURRENT);
                  //audioManager.setSpeakerphoneOn(true);
                  //audioManager.setMode(AudioManager.MODE_IN_CALL);
                  //audioManager.setSpeakerphoneOn(true); …
Run Code Online (Sandbox Code Playgroud)

android speakerphone

6
推荐指数
2
解决办法
1万
查看次数

查找SQL Server 2008中对表列的所有引用

有没有办法在SQL Server 2008数据库中查找对表列的所有引用?我需要知道引用列的其他表或存储过程或视图.

sql-server-2008

5
推荐指数
1
解决办法
8461
查看次数

C#中的灵活日志界面设计

我想编写自己的Logging类(在C#中),它实现了一个标准接口,我可以从代码的任何部分调用它.

我的想法是让多个Log类实现Logger接口,每个类都用于其特定的日志目的地,例如,FileLogger将实现日志记录到文件,TextBox记录器将实现登录到Form中的多行TextBox,DBLogger将实现日志记录到数据库表等

此外,每个记录器类可以具有嵌套的记录器或链式记录器类,因此从应用程序代码单次调用Log()方法可以在多个目的地中记录消息; 示例在单个调用中记录到Form上的文件和文本框.

我面临的困难是:

通常我会记录一个正在运行的日志文件(其中包含调试所需的所有日志消息),一个审阅日志文件(其中只包含要由用户审阅的日志消息,或需要用户操作的日志消息),一个多线文本框屏幕(将复制所有日志消息以向用户提供进度指示),以及另一个多行文本框(将仅记录用户要查看的消息).

当我调用logger.Log(消息)时,某些消息可能不适用于特定的日志目标.例如,某些消息可能仅用于记录在正在运行的日志文件或进度文本框中,而不能记录在用户评论文本框中,反之亦然.

由于记录器将被链接以便单个函数调用可以登录到所有必需的目标,因此特定记录器如何识别日志消息不是针对它的,因此忽略日志消息?

我的示例日志界面是:

public interface Logger
{
    public void Log(string msg);
    public void Log(string msgType, string msg);
    public void InitLogSession();
    public void EndLogSession();
    public void AddLogger(Logger chainedLogger);
    public void RemoveLogger(Logger chainedLogger);
}

public class FileLogger : Logger
{
      //implement methods
}

public class TextBoxLogger : Logger
{
      //implement methods
}

public class DBLogger : Logger
{
      //implement methods
}
Run Code Online (Sandbox Code Playgroud)

编辑1:

更确切地说,可能有4个记录器:2个文件记录器和2个文本框记录器.假设一个特定的消息用于1个文本框记录器和1个文件记录器; 我的设计应如何处理?

编辑2:请不要建议现有的日志框架.我只是想自己写吧!

编辑3:好的.我有一个设计.请提供您的反馈,并填补空白.

修改后的界面:

public interface Logger
{
    public void Log(string msg);
    public …
Run Code Online (Sandbox Code Playgroud)

c# logging

3
推荐指数
1
解决办法
1万
查看次数

抛出没有参数的语句,在常见异常处理程序中的catch块之外

我有一个常见的异常处理函数:

public static void ManageException(Exception ex,
                                   string customErrorMsg,
                                   bool displayMessage)
Run Code Online (Sandbox Code Playgroud)

我想从一些catch块中调用它.

处理异常后,我想重新抛出异常,同时保留堆栈跟踪.

我在某处读到了我应该throw声明没有任何参数.该throw声明(没有任何PARAMS)在正常工作catch块,但在我的ManageException功能,它给了我一个编译错误:

不允许在catch子句之外使用不带参数的throw语句

是否有任何解决方案可以从整个堆栈跟踪中重新抛出异常而不会对ManageException函数产生任何性能影响?

我正在使用C#2.0.

c# exception-handling

3
推荐指数
2
解决办法
5443
查看次数

SQL 如何在 SQL 中将数字转换为具有最小小数位数(动态小数位数)的文本

在 SQL 查询中,我想将数值转换为具有最小编号的文本。小数位数,例如如果数字是 2.50,那么我希望输出为 2.5;如果数字是 3,那么我希望输出为 3;如果数字是 18.75,我希望输出为 18.75,等等。

我怎样才能实现这个目标?

编辑 1:为了提供更多背景信息,我将 2 个数值相除,并希望结果在文本中具有所需的最少小数位。

谢谢。

sql sql-server sql-server-2012

2
推荐指数
1
解决办法
4353
查看次数

循环遍历具有 15000 条记录的 pandas 数据帧非常慢,需要 72 秒

我有一个 pandas DataFrame,包含从 Excel 文件读取的 15000 条记录和 20 列。使用此代码将 Excel 文件读入 DataFrame 大约需要 4.13 秒。我系统上的pandas版本是2.0.2。

df = pd.read_excel(excel_path, sheet_name='Sheet 1', header=[
                         2, 3]).astype(object).replace(np.nan, 'None')
Run Code Online (Sandbox Code Playgroud)

for我使用循环遍历 DataFrameiloc并构建一个字典,其中列名称作为字典的键,但名称不同。例如:

data = []
for i in df.iloc:
    mydict = {}
    mydict['col1'] = i['Column 1 Name'].values[0]
    mydict['col2'] = i['Column 2 Name'].values[0]

    mydict['doc_date'] = datetime.datetime.strftime(i['Doc Details']['Doc Date'], r'%d-%m-%Y') \
        if isinstance(i['Doc Details']['Doc Date'], datetime.datetime) \
        else i['Doc Details']['Doc Date'].replace('/', '-')


    # 17 more columns

    data.append(mydict)
Run Code Online (Sandbox Code Playgroud)

for 循环大约需要 72 秒。

循环 DataFrame 和构建字典的更快方法是什么?除了更改字典的键名称和使用 if …

python dataframe pandas

1
推荐指数
1
解决办法
255
查看次数